domingo, 17 de diciembre de 2017

Sub Procesamiento Multiple, Threads, Hilos


Probablemente ya estes familiarizado con el termino subprocesamiento multiple o multi tarea: La capacidad de tener mas de un programa trabajando y que pareciera que se realizan al mismo tiempo. Por ejemplo tu puedes estar imprimiendo mientras estas editando o enviando un fax. Por supuesto, al menos que tengas una maquina con varios procesadores, lo que realemente esta pasando es que el sistema operativo esta repartiendo los recursos a cada programa, dando la impresion que trabajan en paralelo. Esta distribucion de recursos es posible porque mientras piensas mantienes el computador en estado desocupado, por ejemplo mientras tecleas, la mayoria de los CPU'S procesan la data en intervalos muy cortos (teclear datos puede tomar alrededor de 1/20 segundos por cada caracter, despues de todo queda mucho tiempo ocioso para el cpu.)

La multitarea se puede hacer de dos maneras, dependiendo de si el sistema operativo interrumpe el progama sin consultar con ellos primero o si los programas son interrumpidos unicamente cuando estan dispuestos a ceder el control. El primero es llamado multitarea preventiva; el ultimo es llamado multitarea cooperativa o simplemente multitarea no preventiva.

En Java, el subprocesamiento multiple se implementa con Hilos, también conocidos como Threads en ingles.

Aquí os dejo una lista de articulos relacionados con Hilos en Java
Swing y Hilos
Swing y SwingWorker

sábado, 2 de diciembre de 2017

Guia Rapida de Maven

Esta es una guía practica de iniciación para Maven, aprenderemos lo esencial de Maven para empezar a usarlo cuando antes, está guía no pretende profundizar en todas las funcionalidades de Maven, solo veremos lo esencial.

El ciclo de vida de construcción en Maven
Repositorios Maven
El archivo pom.xml de Maven
Dependencias en Maven
Plugins en Maven
Estructura de un proyecto Maven
Agregando directorios al classpath


1. El ciclo de vida de construccion en Maven
Maven usa el concepto build lifecycle, este concepto indica que el proceso de construcción y distribución de un artefacto(proyecto) está claramente definido.
Para la persona que necesita construir un proyecto, esto significa que solo se requiere aprender unos cuantos comandos para construir cualquier proyecto Maven. Maven define una serie de convenciones y reglas. Desde la estructura de un proyecto hasta los pasos de construcción. Maven las define para que podamos construir nuestro proyecto con el minimo de configuraciones y de forma facil.

Maven viene integrado con tres lifecycles: default, clean y site. El lifecycle default maneja el despliegue de tu proyecto, el lifecycle clean maneja limpiezas del proyecto mientras que el lifecycle site maneja la creación de los sitios de documentación de tu proyecto.
Cada uno de estos lifecycle está compuesto por una lista de build phases, un buid phase se define como una etapa en el lifecycle.
Por mencionar los más importantes, el lifecycle default comprende las siguientes build phases:
  • validate - Valida que el proyecto esta correcto y toda la información requerida está disponible
  • compile - Compila el codigo fuente del proyecto.
  • test - Prueba el codigo fuente compilado usando un framework de testing unitario.
  • package - Toma el código fuente compilado y lo empaqueta dentro de un formato distribuible, tal com JAR o WAR.
  • verify - Ejecuta algunas verificaciones sobre los resultados de pruebas de integración para asegurar que pasen los criterios de calidad.
  • install - Instala el package (jar) en el repositorio local, para que sea usado como dependencia en otros proyectos localmente.
  • deploy - Se realiza en el ambiente de producción, copia el package final al repositorio remoto para ser compartido con otros desarrolladores y proyectos.

Estas phases son ejecutadas secuencialmente y en el orden mencionado.
En un ambiente de desarrollo, si queremos instalar nuestro artefacto en el repositorio local ejecutaremos el siguiente comando:

mvn install

Este comando ejecuta cada una de las phases del lifecycle default en el orden (validate, compile, test, package, etc,.), hasta ejecutar la phase install. Es decir, solo necesitas llamar a la ultima phase que necesitas.

2.- Repositorios Maven
Un repositorio es el lugar donde los artefactos (jar, war, ear) construidos son almacenados. Hay dos tipos de repositorios, local y remoto. Los repositorios locales están en el directorio del usuario del sistema, más especifico, en Windows la ruta por defecto es "C:\Users\{usuario}\.m2\repository". En este directorio se almacena una copia de todos los archivos que son usados en nuestro proyecto como dependencias. El repositorio remoto se encuentra en un servidor remoto conectado a la red Internet, este es gestionado por un tercero. El repositorio remoto mas conocido es el del propio maven. La URL del repositorio central de Maven se encuenta en http://www.mvnrepository.com, pos si quieres curiosear un rato.

3.- El archivo pom.xml de Maven
Este archivo es el equivalente al archivo build.xml de ANT. El archivo pom.xml de Maven contiene las configuraciones para construir y gestionar un proyecto. Basicamente aquí se definen las propiedades del proyecto, las dependencias del proyecto(librerias jars de terceros o propios) y los plugins de maven a ejecutar.

Un pom debe tener al menos la siguiente información
  • modelVersion
  • groupId
  • artifactId
  • version
Aquí un ejemplo sencillo de un archivo pom.xml



Generalmente no vas a crear este archivo desde cero, para eso maven te proporciona artefactos (plantillas), tu trabajo se enfocará en agregar las dependencias que necesites.

4.- Dependencias Maven
Dependencias son aquellas liberias (jars) externas que nuestro proyecto requiere, por ejemplo el famoso Log4J, libreria para escribir registros. Toda dependencia que nuestro proyecto requiera debe ser declarado en nuestro POM (pom.xml). Maven buscará estas dependencias en nuestro repositorio local, si no los encuentra entonces los descargará desde el repositorio remoto y los guardará en el repositorio local. Para agregar una dependencia tenemos un elemento disponible, el elemento dependency. Aquí un ejemplo las dependencias que tengo en mi proyecto.


Generalmente para agregar una dependencia lo primero será asegurarnos que se encuentra en el repositorio central de Maven, definirlo en el POM incluyendo el groupId, artifactId, version, type y scope. Lo que yo hago es buscar el artifactId en el repositorio centrar de Maven, copiar la porcion del xml y pegarlo en mi POM.
Por ejemplo para log4j


Los elementos groupId, artifactId y version, se entienden por si solos, te explico los otros dos elementos.
  • type: El tipo de empaquetado que usa la dependencia, generalmente esto lo sabes por el tipo de extensión de la dependencia; jar, war o ear. No siempre el tipo corresponde a la extensión, pero si en su mayoria.
  • scope: Este elemento se refiere al contexto del uso de la dependencia en relación con el classpath, es decir, se desea usar la dependencia en compilacion, en tiempo de ejecución o en testing. Hay cinco tipos de scope disponibles, pero las mas usadas son:
    • compile: Es el scope usado por defecto, en caso de que no se especifique alguno.Dependencias con scope compile son agregados al classpath, es más, estás dependencias son propagadas a proyectos dependientes.
    • runtime: Dependencias con scope runtime no son requeridas para la compilación, pero si para la ejecución.
    • test: Dependencias con scope test no son requeridas para uso normal de la aplicacion, sólo están disponibles para la fase de pruebas y ejecución.
5.- Plugins en Maven
Todo proceso en Maven es realizado por plugins. Un plugin es mapeado y ejecutado como una phase. Una phase es mapeada a multiple objetivos. Estos objetivos son ejecutados por el plugin. Nosotros podemos invocar explicitamente un objetivo cuando ejecutamos Maven.
Un plugin muy usado es el plugin 'compiler', este plugin es el encargado de compilar el codigo fuente Java. El plugin compiler tiene dos objetivos, compiler:compiler y compiler:testCompile.
Usando el elemento configuration, podemos pasar parametros al plugin. Aquí podemos ver una poción de mi pom.xml que usa plugins.


Para proyectos básicos no necesitas agregar explicitamente los plugins, mas adelante veremos los arquetipos, ellos se encargan de agregar los plugins necesarios.

6.- Estructura de un proyecto en Maven
Maven tiene bien definido una convención para la estructura de directorios de un proyecto. Si seguimos está convención no necesitaremos configuraciones adicionales para definir donde están localizados los elementos. Maven conoce donde se encruenta el código fuente, casos de pruebas, recursos, etc,. Para conocer un poco más veamos la estructura de un proyecto web.

Las carpetas más importantes son: src, resources, webapp, test, target.
De nuevo, para proyectos básicos no necesitas crear explicitamente el directorio, Maven o hace por tí

7.- Archetype en Maven
En Maven tenemos los 'Archetype' o arquetipos, los arquetipos son como plantillas para crear proyectos. Maven proporciona estas plantillas para iniciar un proyecto, usando arquetipos podemos iniciar rapidamente un proyecto Maven. Los arquetipos definen la estructura de directorios de nuestro proyecto, definen los plugins a usar, definen las dependencias. Más especifico, ademas de definir la estructura de directorios también definen un pom.xml.

8.- Creando nuestro primer proyecto en Maven
Ahora si, vamos a crear nuestro primer proyecto Maven, asumiendo que tienes Maven instalado correctamente. 
Lo primero que haremos será abrir una ventana de comandos, navegar hasta el directorio donde queremos crear el proyecto, luego ejecutar el siguiente comando:

mvn archetype:generate -DgroupId=com.macrob.sample -DartifactId=first-mavenapp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Donde
  • -DgroupId: Es la combinacion de la organización y producto.
  • -DartifactId: El nombre del artefacto, o el nombre del jar. Este nombre es también usado para nombrar el directorio raiz del proyecto.
  • -DarchetypeArtifactId: El arquetipo a usar

 

Lo que hemos hecho es crear un proyecto vacío, un proyecto con una estructura de directorios definido, en donde podemos ir agregando clases, recursos, etc,. Ademas de la estructura de directorios, también tenemos un archivo pom.xml dentro del directorio raiz del proyecto creado,en el pom.xml podemos ir agregando dependencias. Este es un proyecto estandard, si necesitas un proyecto para una aplicación web, necesitas ejecutar un arquetipo para un proyecto web.
Para finalizar, vamos a crear el jar de nuestro proyecto, si lo unico que quiero es generar el jar, vamos a ejecutar el build phase package  

mvn package



Si entras al directorio target vas a ver un jar con el nombre first-mavenapp-1.0-SNAPSHOT.jar
Si necesitas instalar este artefacto en tu repositorio local, solo tienes que ejecutar el build phase install
mvn install

9. Agregando directorios al classpath de Java

Agregar directorios al classpath de Java es otra actividad escencial en Java, recuerda que los directorios que se agregan al classpath en su mayoría se necesitan en tiempo de ejecución.




El directorio se agrega como un recurso dentro de la lista de cursos en la sección build. La ruta es relativa al archivo pom.xml

Referencia

miércoles, 8 de noviembre de 2017

Quieres Tener un Perro?

Ya sea que adoptes o compres, antes que actues lee esta entrada para darte una idea con lo que tendrás que lidiar.

1. El espacio
Lo ideal es tener una casa con un patio amplio, si vives en departamento y además lo compartes debes considerar la opinión de los otros. Algunos perros tienen la costumbre de comer los muebles de madera, debes lidiar con eso, también algunos perros tienden a tener olor muy seguido, considera que continuamente debes hacer limpieza y bañar al perro.

2. El tiempo
Los perros demandan tiempo, les encanta salir a jugar, a correr. Debes dedicarle al menos 3 horas al día. Considera tu horario laboral. tu proyección profesional, estás por tomar algunos cursos?, considera el horario. Vas a viajar por trabajo?, también tenlo presente. Es ideal que tengas amigos con quien dejarlo cuando quieres escaparte un fin de semana a la playa. Si eres muy fiestero o parrandero, con un perro debes limitarte, porque te espera en tu casa/departamento, al día siguiente en la mañana hay que darle de comer y llevarlo a pasear.

3. Tu presupuesto
Tu amigo no sólo necesitará que lo alimentes, también se te va a enfermar de vez en cuando y necesitarás llevarlo al veterinario y comprarle medicinas. Considera también comprarle juguetes y llevarlo a la peluquería

4. El pelo
Hay perros y épocas en los que ellos botan mucho pelo, debes acostumbrarte a lidiar con ellos, en el suelo, en la ropa, en su cama y todo por donde camine. La solución es llevarlo seguido a la peluquería y limpiar tu casa o departamento muy seguido.

5. La limpieza
Con un inquilino perruno, debes incrementar las frecuencias de limpieza, al salir a la plaza/parque a caminar regresas con los zapatos llenos de tierra, si el perro está botando pelos, deberás limpiar tu casa/departamento más seguido.

6. Los cuidados

7. Tu ubicación
Es ideal que vivas cerca de un parque/plaza así tendrás donde llevarlo a correr, ellos adoran las plantas, los arboles, adoran olfatear

Por último recordarte que un perro es como un hijo, ni más ni menos.

domingo, 5 de noviembre de 2017

Tutorial Basico PrimeFaces

Esta guía contiene los siguientes puntos
  • ¿Que es PrimeFaces?
  • Prerrequisitos
  • Crear el proyecto en Netbeans
  • Agregar la dependencia PrimeFaces a nuestro archivo pom.xml
  • Crear nuestra página index.xhtml
  • Agregar nuestro descriptor de despliege
¿Que es PrimeFaces?
PrimeFaces es una suite de componentes gráficos (botones, menús, listas, listas desplegables, tablas, paneles, dialogos y otros) para crear interfaces gráficas de usuarios para aplicaciones web. Prime Faces es una extensión de JSF(Java Server Faces). He usado esta suite para desarrollar aplicaciones JEE, existe una extensa documentación pero solo en ingles, es por ello que me nació la iniciativa de escribir un guía básica, la verdad es que PrimeFaces no es muy complejo, si has trabajado con JSF te adaptarás muy rapido.

Algunas características de PrimeFaces
  • Se compone de un amplio catalogo de componentes, editores Html, dialogos, cuadros de textos que se autocompletan, graficas y mucho más.
  • Se basa en APIs de Ajax y en el estandard JSF
  • Ligero, un solo jar, no requiere dependencias y cero configuraciones
  • Cuenta con un kit para desarrollo mobile
  • Cuenta con 35 temas y herramienta para diseñar mas temas
  • Extensa documentación pero solo en ingles
  • Tiene una comunidad grande y activa
  • Desarrollado con pasión, de desarrolladores de aplicaciones para desarrolladores de aplicaciones.

En esta guía básica solo mostraremos un popup con el mensaje "Hola Mundo desde PrimeFaces"


Prerrequisitos
Java JDK 6 o Java JDK 7
JBoss AS 7.1.1 Final
Netbeans 8.1 con Maven y Soporte para Java Web y JEE

Si tienes dudas con la instalación y configuración de JBoss, te recomiendo revisar mi entrada anterior Instalar jbossas7 en windows

JBoss AS 7, viene con Mojarra, el cual es una implementación de Java Server Faces versión 2.0

1.- Crear el proyecto en Netbeans
Crearemos un proyecto en Netbeans, File, New Project. En categories seleccionamos Maven y en projects seleccionamos Web Application, Next.


Ingresamos los siguientes datos, Next.



Seleccionamos el servidor JBoss as 7, Finish.


2.- Agregar la dependencia PrimeFaces a nuestro archivo pom.xml
Vamos a usar la version 5.3 de PrimeFaces, lo podemos hacer de dos formas, la primera es editando  el archivo pom.xml y agregar el siguiente extracto de xml

        <dependency>
            <groupId>org.primefaces</groupId>
            <artifactId>primefaces</artifactId>
            <version>5.3</version>
        </dependency>

La segunda opción es agregarlo de forma gráfica, en el navegador del proyecto, seleccionar Dependencies, click derecho Add Dependency
Add

3.- Crear nuestra página index.xhtml
En el navegador del proyecto, seleccionamos el directorio Web Pages, click derecho, NewOther, en Categories seleccionamos Web y en Files Type seleccionamos XHTML, Next.
En el siguiente Dialogo, ingresar el nombre index

Editamos la página, lo más relevante de nuestra página

El namespace de primefaces
xmlns:p="http://primefaces.org/ui"

El tag contenedor de Java Faces
<f:view contentType="text/html">

El resto son los componentes gráficos, aquí tienes la página completa.



4.- Agregar nuestro descriptor de despliege
En el navegador de proyecto, seleccionamos el directorio Web Pages, click derecho, New, Other, en Categories seleccionamos Web y en Files Type seleccionamos Standard Deployment Descriptor (web.xml)



Algunos tutoriales te dirán que debes tener el archivo de configuración faces-config.xml, para este ejemplo simple no es necesario.

Aquí puedes descargar el proyecto para Netbeans

Ejecutar
Siempre recomiendo primero hacer un Clean and Build y luego Run, la aplicación se desplegará en el navegador por defecto.

Conclusión
Java Server Faces ha evolucionado mucho, ahora es más simple sin tantos archivos de configuraciones como lo era en un inicio. PrimeFaces es una suite de componentes enriquecidos, facil de usar y que no requiere de dependencias ni configuraciones.

Referencia
https://www.primefaces.org/documentation/

domingo, 29 de octubre de 2017

Cosas de la vida: Evita ser estafado

Había ya escuchado varias historias de personas que fueron estafadas, pero, a mi no, nunca me pasaría eso, yo era más listo que esas personas, me dije. Lo cierto es que nadie está a salvo, todos estamos expuestos a ser estafados, así que lo mejor que podemos hacer es aprender de la experiencia de otros y dudar siempre de las oportunidades que se nos presentan.

En el año 2008, en la pequeña ciudad de no más de 30 mil personas donde aun vivía yo, existían sociedades de ahorro y prestamos, dicha sociedad debería funcionar con voz y voto de los socios, pero en la realidad los socios solo ponían capital y recibían una utilidad. Cierto día empezó a correr el rumor de que una de estas sociedades estaba dando un retorno de utilidad del 21% mensual, esta sociedad tenía varias sucursales por todo el estado.
Muchas personas corrieron a depositar sus ahorros, incluyendo a mi madre que no quiso perderse la gran oportunidad, la gran oportunidad decía ella, y así fue como fue a depositar una suma considerable Yo era niño, y muy descuidado, no cuestionaba lo que me decían, obedecía  cual niño obediente. Mi madre me comentó antes de realizar el deposito, pero yo solo asentí con la cabeza sin decir nada. Pasaron un par de semanas para enterarnos que la acta directiva, el gerente general y dos o tres colaboradores más, se habían dado a la fuga llevándose con ellos cientos de millones de pesos, producto del ahorro de los socios.
De esta experiencia aprendí algunas cosas, cuando muchas personas corren hacia un lugar, antes de que uno salga corriendo detrás de ellas, se debe parar, reflexionar y no sólo actuar por impulso. Una inversión que prometa más del 3% de rentabilidad mensual, no es una inversión sostenible en el tiempo, hay que dudar de ellas. Siempre, siempre se debe diversificar y no postar todos tus ahorros en un mismo lugar.

La segunda anécdota le pasó a un amigo, justo había salido de una reunión y salió a caminar para despejar la mente, iba caminando cuando de pronto miro al suelo y se encontró con un rollo de billetes, al principio no estaba seguro de lo que era, pero después confirmó que era un rollo de billetes, lo tomó, siguió caminando y apresuró el paso, no paso mucho para que una persona lo alcanzará y le dijera que lo había visto recoger el rollo de billetes, pero que no se preocupará porque no iba a decir nada, pero con una condición, que le pasará una cantidad de dinero. Uno pensaría que mi amigo sacaría esa cantidad del mismo rollo de billetes encontrado, lo cierto es que no, mi amigo sacó la cantidad de dinero de su propia billetera, probablemente no tenía la cantidad que el sujeto pedía para guardar silencio, así que le entregó todo lo que tenía en la billetera, que más daba si ese día estaba de suerte. Al llegar a casa saco el rollo de billetes encontrado sólo para darse cuenta que sólo el primer billete era real, el resto billetes falso.

Tengo otras historias que contaré más adelante.

Por cierto, existe un fideicomiso para cuando una sociedad se va a quiebra, al final mi madre recuperó cerca del 70% del capital que le estafaron.


domingo, 8 de octubre de 2017

De visita al templo Bahai

He tenido días con muchas obligaciones, el trabajo y la universidad me tenían agobiado así que solicité un descando de 15 días, aproveché en descansar, dormir hasta muy tarde, desayunar con toda tranquilidad y leer los cientos de correos en espera. Esta semana recibí un mensaje de una gran amiga, me preguntaba si deseaba acompañarla a visitar el templo Bahai. A ella le gusta la fotografía, experimenar con diferentes posturas y angulos, así que imaginé que sería divertido visitar este hermoso templo y aprovechar en tomarnos muchas fotografías. Me emocioné y acepté la invitación.
Llegó el día domingo y como siempre, me levanté algo tarde, desayune rapido, me duché y partí al lugar del encuentro acordado, como ninguno de los dos tiene auto decidimos ir en tranporte publico, tomamos una micro que nos acercaría al lugar, en el trayecto bromeamos y reimos, así llegamos a la última parada. El templo se encuentra en un cerro, es necesario subir el cerro, hay autos colectivos que te cobran menos de 2 USD para llevarte hasta el templo, nosotros fuimos a buena hora porque no había poca gente.
El regreso lo hicimos a pie ya que los colectivos estaban saturados, fue divertido ver como algunos conductores no eran tan buenos con la subida y el auto se les apagaba, volver a retomar la marcha era todo un desafio.















lunes, 2 de octubre de 2017

Guía rapida de GitHub

Esta guía es una traducción de la guía oficial,  enriquecida con comentarios y experiencia propia, está validada para Windows y tiene como objetivos aprender a:
  • Crear y usar un repositorio
  • Iniciar y administrar una rama en GitHub
  • Abrir una petición Pull y llevar los cambios de una rama arbitraria a la rama principal
  • Subir un proyecto local a Git Hub
  • Clonar un repositorio a nuestro equipo de desarrollo
  • Subir los cambios de nuestro repositorio local al repositorio remoto
  • Actualizar nuestro repositorio local con los cambios del repositorio remoto

Git y GitHub están en constante evolución por lo que te recomiendo repasar de vez en cuando esta guía.

Qué es GitHub?

GitHub es una plataforma de alojamiento de archivos y control de versiones, usado principalmente para alojar códigos fuente y colaboración. Permite que tu y otros puedan trabajar juntos sobre los mismos proyectos sin importar el lugar  en donde se encuentren. GitHub está integrado con Git, Git es el sistema que permite llevar el control de versiones. Las principales ventajas de usar un sistema de control de versiones son:

  • Cuando modificas un archivo y confirmas los cambios, se crea una nueva versión de tu archivo, Git lleva el historial de las versiones y te permite acceder a ellos cuando así lo requieras.
  • Permite la colaboración simultanea de otros sobre el mismo archivo. Con Git puedes exponer tus proyectos al publico mediante Internet, cualquier persona con acceso a tu proyecto puede modificar los archivos, Git cuida y controla las modificaciones para asegurar cambios coherentes.
  • Tu proyecto está accesible y puedes acceder a el en donde quiera que te encuentres.
Normalmente uno tendría que configurar su propio servidor para Git, afortunadamente con la plataforma GitHub esto no es necesario y al menos para uso personal es gratuito. Ademas de GitHub existe otra plataforma de alojamiento que usa Git, BitBucket.

Esta guía te enseñará lo esencial  de GitHub, veremos conceptos como: repositorios, branches(ramas), commits, y peticiones Pull. Crearemos un repositorio Hello Word y aprenderás el flujo de trabajo de las peticiones Pull de GitHub, estas peticiones son una forma popular de crear y revisar código.

Crear un Repositorio
Un repositorio es usado usualmente para organizar un solo proyecto. Los repositorios pueden alojar directorios y archivos, imágenes, vídeos, hojas de calculo, y set de datos -cualquier cosa que tu proyecto necesite. Nosotros recomendamos incluir un archivo Readme o un archivo con información acerca de tu proyecto. GitHub lo hace fácil, te permite agregar un archivo Readme al mismo tiempo que creas tu nuevo repositorio. También ofrece otras opciones comunes como un archivo de licencia.
El repositorio hello-word que vamos a crear puede ser un lugar donde guardes tus ideas, recursos o compartir y discutir cosas con otros. Recuerda que un repositorio tiene asociado un historial de modificaciones, puedes consultar quien, cuando y que cambios realizaron. Es esto lo que lo diferencía de un servidor de archivos.

Para crear un nuevo repositorio
1. Ingresar con tu cuenta a GitHub
2. En la esquina superior derecha, hacer click en el botón + y seleccionar New Repository
3. Nombrar el repositorio como hello-word
3. Escribir una descripción corta
4. Seleccionar Initialize this repository with a README

Click en Create Repository
Los pasos descritos se usan cuando se desea crear un repositorio nuevo, de uso general y que se pretende gestionar desde la plataforma GitHub.

Crear una Rama

Branch (en español, rama)
Actualización: Desde el 2021 la rama por defecto cambió de nombre, ahora se llama main
Branching (en español, el acto de manejar ramas) es la forma de trabajar con diferentes versiones de un repositorio al mismo tiempo.
Por defecto tu repositorio tiene un branch llamado master que esta considerado a ser el branch definitivo. Usamos branches (ramas) para experimentar y realizar cambios antes de darle el visto bueno y pasarlo al branch master.

Cuando creamos un branch del branch master, lo que en realidad estamos haciendo es crear una copia, un snapshot (captura) del branch master tal cual se encuentre al momento de hacer el branch. Si alguien más realiza cambios al branch master mientras tu estás trabajando en tu branch, puedes perfectamente llevar esos cambios al tuyo.

En el siguiente diagrama podemos ver:
  • El branch master
  • Un nuevo branch llamado feature (funcionalidad), porque estamos realizando una nueva funcionalidad en este branch
  • El proceso por el que tiene que pasar el branch feature antes de llevar estos cambios a la rama principal master.


Alguna vez has guardado diferentes versiones de un archivo? Algo como:
story.txt
story-joe-edit.txt
story-joe-edit-reviewed.txt

Las ramas cumplen un objetivo similar con los repositorios, tener varias versiones.

En GitHub, programadores y diseñadores usan las ramas para solucionar errores e implementar nuevas funcionalidades, fuera de la rama principal, siendo la rama principal la rama en producción. Una vez que los cambios o funcionalidades están validados, se llevan a la rama principal master.

Para crear una nueva rama
1. Ir al repositorio hello-world (previamente debes haber ingresado a tu cuenta)
2. Click en la lista desplegable que dice "branch:master", lista que se encuentra encima de la lista de archivos (ver gif).
3. Ingresa un nombre para la rama en el campo de texto, readme-edits.
4. Click en el botón azul Create branch, o presiona enter en el teclado.



Ahora ya tienes dos ramas, master y readme-edits. En estos momentos tenemos exactamente lo mismo en las dos ramas. Más adelante agregaremos cambios a nuestra nueva rama.

Realizar cambios y commit
En GitHub, a la acción de guardar los cambios (agregar nuevos archivos, agregar o modificar contenidos de archivos) en el repositorio, se le conoce como realizar un commit. Cada commit tiene un mensaje que describe brevemente el porqué de los cambios realizados. Los mensajes de los commits capturan la historia de tus cambios para que otros programadores puedan entender que es lo que has hecho y porqué lo has hecho.

Realizar cambios y guardarlos
1. Seleccionar la rama readme-edits

2. Click en el archivo README.md
3. Click en el icono Editar, ubicado en la esquina superior derecha del archivo a editar.

4. En el editor escribe algunas lineas.
5. Escribe un mensaje del commit que describa tus cambios.
6. Click en el botón Commit changes


Estos cambios serán aplicados solo al archivo README en tu rama readme-edits, ahora esta rama contiene contenido que es diferente a la rama master

Abrir una petición Pull
Ahora que ya tenemos cambios fuera de la rama master, estamos en condiciones de abrir una petición Pull
Las peticiones Pull son el corazón de la colaboración en GitHub. Cuando abrimos una petición Pull, estamos proponiendo nuestros cambios y solicitando que alguien los revise y los incluya en su rama. Las peticiones Pull muestran diferencias diffs, del contenido en ambas ramas, cambios que fueron agregados se muestran en verde, cambios que fueron eliminados se muestran en rojo.
Tan pronto como realices un commit puedes abrir una petición Pull, y empezar una discusión para recibir retroalimentación, incluso si tu funcionalidad no esté terminada completamente, puedes ir haciendo commits  y pulls por cada iteración.
Las peticiones Pull pueden estar dirigidos a una persona en especifico o a un grupo de personas, para mencionarlos, en tu comentario debes agregar @nombre_usuario.
Es más, puedes abrir una petición Pull, para ti mismo e incluir los cambios de una rama a otra, es una excelente manera de aprender el flujo de trabajo.

Abrir una petición Pull para los cambios realizados en el archivo Readme
1. Seleccionamos nuestro branch donde se encuentra el commit
2. Click en el botón New Pull Request

3. Verificar los cambios en la sección donde se muestra el diff (parte inferior de la página, bajar el scrollbar)


4. Una vez que comprobaste que los cambios son correctos, puedes hacer click en el botón verde Create Pull Request, muy importante, lee el mensaje remarcado en el rectángulo rojo, en mi caso me dice que no hay conflicto y que puedo hacer un merge.
Si quieres también puedes agregar un mensaje antes de crear la petición Pull

Hacer un Merge a tu petición Pull
Se le conoce como Merge (combinar o mezclar en español) a la acción de llevar los cambios de una rama a otra. No te preocupes, Git lo hace por ti, al menos que exista un conflicto entre las ramas.
Bien, vamos a llevar los cambios que hicimos en la rama readme-edits a la rama master.
1. Posiciónate en la pestaña Pull Requests
2. Click en el botón verde Merge pull request para unir los cambios a la rama master.

3. Click en Confirm merge

Una vez confirmado el merge, Git te la opción de eliminar la rama Delete branch

Instalar Git 

Instalar Git para Windows, lo puedes descargar desde https://git-scm.com/downloads 
Yo personalmente trabajo con la linea de comandos de Git, no uso ninguna herramienta o aplicación GUI y esta guía esta diseñada para trabajar desde la linea de comandos.
Instalar Git no es tan complejo, solo sigue los pasos y opciones por defecto, pero si ten especial cuidado en el paso "Choose a credential helper", debes de seleccionar Git Credential Manager, quizás mas adelante escriba una entrada hablando exclusivamente sobre los credentials managers.

Subir un proyecto a repositorio de GitHub

Si en nuestro equipo local ya contamos con un proyecto y deseamos subirlo a GitHub, debemos seguir otra serie de pasos.
En mi equipo local tengo el siguiente proyecto llamado github-project, proyecto que subiré a GitHub



2. Ingresar al directorio del proyecto, click derecho y seleccionar Git Bash Here
3. Usaremos el comando init de Git. El comando init de Git crea un repositorio local, para poder trabajar con Git primero debemos tener un repositorio local.
4. Crear un archivo .gitignore con la lista de excepciones
5. Agregar todos archivos al repositorio con la sentencia git add .
6. Ejecutar un commit para aplicar los cambios con la sentencia git commit -m 'first commit', al ser la primera vez nos pedira configurar el email y nombre del usuario.
$ git config --global user.email "correo_usado_en_github@gmail.com"
git config --global user.name "nombre_usuario_github"

Con el commit lo que hacemos es aceptar los cambios en nuestro repositorio local.

7. Crear un repositorio en GitHub, siguiendo los pasos mencionados anteriormente pero sin seleccionar Initialize this repository with a README de preferencia asignarle el mismo nombre que el del proyecto.

7. Vincular nuestro repositorio local con el repositorio remoto, con la sentencia git remote add origin https://github.com/marcosrobertos/github-project.git
8.  Finalmente enviar los cambios de nuestro repositorio local a nuestro repositorio remoto, con la sentencia git push -u origin master git push -u origin main, donde origin es un alias a la url de nuestro repositorio remoto y master main es la rama por defecto. Git levantará un popup donde debes ingresar el usuario y contraseña de GitHub

Si el repositorio no es tuyo, debes de asegurarte el alias y la rama a donde debes subir los cambios. Para ello puedes ir a consultar el archivo de configuración de Git.
En términos de control de origen, usted es " downstream " cuando copia (clona, ​​realiza el pago, etc.) desde un repositorio. La información fluyó "hacia abajo" hacia ti.
Cuando realiza cambios, normalmente desea enviarlos de vuelta " upstream " para que ingresen en ese repositorio, de modo que todos los que proceden de la misma fuente trabajen con los mismos cambios.
La primera vez que hacemos un push usamos la opción -u, en palabras simples estamos estableciendo el repositorio y rama por defecto a donde haremos push y pull. La siguiente vez que ejecutes push o pull no será necesario que especifiques el repositorio y rama.

Si vamos a GitHub veremos nuestros cambios

Clonando un repositorio a nuestro equipo de desarrollo

Vamos a clonar un repositorio, asegúrate de tener instalado un cliente Git, si no:
Instalar Git para Windows, lo puedes descargar desde https://git-scm.com/downloads

Ubícate en el directorio donde quieres clonar tu proyecto, click derecho Git Bash Here

Ingresa el siguiente comando:
git clone url_proyecto

También es posible renombrar el directorio raíz del proyecto, para ello usa el siguiente comando:
git clone url_proyecto nombre_directorio

Subiendo cambios de nuestro equipo de desarrollo al repositorio

Subir cambios de nuestro equipo de desarrollo a nuestro repositorio se le conoce como hacer un push, podemos hacer un push a la rama main o a otra rama.

Ubícate en el directorio raíz de tu proyecto, click derecho Git Bash Here

Para ver los cambios, ingresa el siguiente comando:
git status

Hay que agregar al repositorio local todos los archivos que tienen cambios, para ello puedes ejecutar los siguientes comandos:
Agregar un archivo especifico git add nombre de archivo
Agregar todos los archivos con cambios git add .
Agregar todos los archivos con una extensión especifica git add *.extension

Para ver el nuevo estado de nuestro repositorio local
git status

Confirmar los cambios en nuestro repositorio local
git commit -m "mensaje"

Subir los cambios a nuestro repositorio remoto
git push

** No fue necesario usar la versión git push -u origin main ya que el repositorio fue clonado **

Actualizar nuestro repositorio local con los cambios del repositorio remoto

Ubícate en el directorio raíz de tu proyecto, click derecho Git Bash Here
Ingresa el comando git pull origin main
Donde origin es el alias de la url de tu repositorio y master es el nombre de la rama. Te aconsejo averiguar el nombre de la rama ya que actualmente el nombre de la rama principal por defecto es main, anteriormente era master

Manejo de ramas en Git Bash

Cambiar de Rama
Lo primero debes de hacer un git pull luego ejecuta el comando
git checkout nombre-rama
Si todo sale bien vas a ver el mensaje "Switched to a new branch 'develop'
" indicando que has cambiado de rama

Revertir ultimo commit
git revert id-commit

Mostrar historial de commits 
git log

Revertir cambios que aun no han sido commit
git restore path-archivo
git restore .
git restore *.*
git restore :/

Resumen de comandos básicos de VIM
https://docs.oracle.com/cd/E19620-01/805-7644/6j76klopr/index.html

lunes, 28 de agosto de 2017

Piensas adoptar un perro?


1. El espacio
Lo ideal es tener una casa con un patio amplio, si vives en departamento y además lo compartes debes considerar la opinión de los otros. Algunos perros tienen la costumbre de comer los muebles de madera, debes lidiar con eso, también algunos perros tienden a tener olor muy seguido, considera que continuamente debes hacer limpieza y bañar al perro.

2. El tiempo
Los perros demandan tiempo, les encanta salir a jugar, a correr. Debes dedicarle al menos 3 horas al día. Considera tu horario laboral. tu proyección profesional, estás por tomar algunos cursos?, considera el horario. Vas a viajar por trabajo?, también tenlo presente. Es ideal que tengas amigos con quien dejarlo cuando quieres escaparte un fin de semana a la playa. Si eres muy fiestero o parrandero, con un perro debes limitarte, porque te espera en tu casa/departamento, al día siguiente en la mañana hay que darle de comer y llevarlo a pasear.

3. Tu presupuesto
Tu amigo no sólo necesitará que lo alimentes, también se te va a enfermar de vez en cuando y necesitarás llevarlo al veterinario y comprarle medicinas. Considera también comprarle juguetes y llevarlo a la peluquería

4. El pelo
Hay perros y épocas en los que ellos botan mucho pelo, debes acostumbrarte a lidiar con ellos, en el suelo, en la ropa, en su cama y todo por donde camine. La solución es llevarlo seguido a la peluquería y limpiar tu casa o departamento muy seguido.

5. La limpieza
Con un inquilino perruno, debes incrementar las frecuencias de limpieza, al salir a la plaza/parque a caminar regresas con los zapatos llenos de tierra, si el perro está botando pelos, deberás limpiar tu casa/departamento más seguido.

6. Los cuidados

7. Tu ubicación
Es ideal que vivas cerca de un parque/plaza así tendrás donde llevarlo a correr, ellos adoran las plantas, los arboles, adoran olfatear

Por último recordarte que un perro es como un hijo, ni más ni menos.

sábado, 26 de agosto de 2017

NetBeans IDE tiene y hace uso de un cache

Era un día cualquiera de trabajo, modifiqué mis clases correspondientes y ejecute el proyecto, algo andaba mal, la funcionalidad no reflejaba los cambios, vuelvo a revisar las modificaciones, compilo las clases y ejecuto de nuevo. Nada, todo seguía igual, probé borrando el directorio dist del proyecto para que se compilara de nuevo. Vuelvo a ejecutar y nada, la funcionalidad no reflejaba los cambios. Me puse a investigar y encontré que NetBeans tiene un caché, NetBeans guarda el resultado de las compilaciones en este caché y lo usa para resolver enlaces entre componentes, también en este caché se guarda el resultado del escaneo del classpath. Cuando el caché está corrupto NetBeans no puede resolver correctamente la localización de las clases. Un caché corrupto también causa errores de compilación relacionados con librerías. Y es así como a veces NetBeans se comporta de forma extraña, "se marea" como decimos aquí, es por ello que se recomienda borrar el cache cuando estos problemas ocurran.

¿Como borrar el cache de Netbeans?

Las siguientes instrucciones son válidas para Netbeans 7.2 y  superior

1. Localiza el directorio de cache, ir a Ayuda, y luego en Acerca De

2. Cerrar Netbeans
3. Renombrar el directorio cache
4. Iniciar Netbeans
5. Una vez que inicie, se habrá creado un nuevo directorio de cache
6. Después que Netbeans haya iniciado de forma exitosa, borrar el directorio renombrado

sábado, 19 de agosto de 2017

El costo de vivir en Santiago de Chile

Si eres un viajero y estás planeando unas vaciones en la gran ciudad de Santiago de Chile, aquí te dejo algunos tips y costos para que vayas considerando en tu presupuesto.

Movilidad o Transporte Metro y Transantiago
Me gusta mucho viajar en el metro de Santiago, es un metro muy cuidado, organizado, ordenado y limpio, donde no hay ambulantes como en la CDMX. El costo de viajar en metro depende del horario, te dejo una tabla con horario y costos.


Un dolar USD se encuentra entre 650 y 680 pesos
La otra opción para moverse es usar el sistema de buses Transantiago, el cual tiene unos costos similares al metro, con la ventaja de que si combinas metro y transantiago puedes pagar hasta 0 pesos en al menos un viaje.

Para consultar al día los costos te dejo el enlace de la pagina del metro
https://www.metro.cl/guia-viajero/tarifas

Y para ver los costos y costos combinados de metro-transantiago aquí el enlace
https://www.transantiago.cl/tarifas-y-pagos/conoce-las-tarifas;jsessionid=GhikyX5X5yAJJ8YH3c+n2aHl

Deployar Petstore en Java EE 6 con JBoss AS 7 mas Netbeans 8.1

Sun llegó a crear una aplicación web llamada Java Petstore, esta aplicación fue diseñada para mostrar como la tecnología J2EE(Java Enterprise Edition 2) podía ser empleada para desarrollar una aplicación web eCommerce. Sí, el objetivo de Petstore es vender mascotas en linea.
La aplicación Petstore llegó a ser tan popular, pero en esos tiempos, la versión J2EE era muy compleja, muchos archivos de configuración, muchas interfaces por implementar y usaba muchos patrones de diseños que hoy están obsoletos.
En 2013 cuando quise aprender Java JEE 5 encontré una adaptación de la aplicación Petstore para Java EE 5, YAPS Petstore, desarrollado por un arquitecto Francés de nombre Antonio Goncalves, traté de estudiar el código de la aplicación pero habían tantas tecnologías involucradas y lo complejo que eran termino por decantarme.
Este año retomé mi curso de Java EE 6, y buscando libros me entero que Antonio Goncalves ha escrito varios libros entre ellos uno para Java EE 6, y como era de suponer, ha realizado una actualización de la aplicación Petstore, en donde podemos observar el uso de nuevos patrones y APIs. Las tecnologías incluidas en la aplicación YAPS Petstore son: CDI, EJB Lite, REST interface, Bean Validation.

El objetivo de esta aplicación es:
  • Usar Java EE 6 y sólo Java EE: Ningún framework externo o dependencia, incluso usa la API java.util.logging
  • Mantenerlo simple: Ningún algoritmo de negocio complejo, aun así usa la mayoría de las APIs de Java EE 6, el punto es llevar la tecnología Java EE 6 en una aplicación web eCommerce.
Prerrequisitos
Java EE 6 o Java EE 7
JBoss AS 7.1.1 Final
Netbeans 8.1

Si tienes dudas con la instalación y configuración de JBoss, te recomiendo revisar mi entrada anterior

http://marcosrobertos.blogspot.com/2017/08/instalar-jboss-as-7-en-windows.html

Obteniendo y configurando el proyecto

Lo primero que haremos es obtener el código fuente desde github, lo podemos clonar o descargar, yo preferí clonarlo.





Abrimos el IDE Netbeans y abrimos el proyecto


Agregamos el servidor JBoss AS 7 a los servidores de Netbeans





Configurando el Data Source con MySQL
Lo primero es crear la base de datos en MySQL, yo he creado la base de datos con el nombre agoncal_petstore



Luego debemos configurar nuestro datasource en el archivo standalone.xml de JBoss,  localizado en  $JBOSS_HOME\standalone\configuration

Para definir un DataSource agregar el siguiente fragmento de xml

                
   <datasource jndi-name="java:jboss/datasources/PetStoreDS" pool-name="PetStoreDS">
      <connection-url>jdbc:mysql://localhost:3306/agoncal_petstore</connection-url>
      <driver>mysql</driver>
            <security>
               <user-name>root</user-name>
               <password>XXXXXXXXX</password>
            </security>
   </datasource>




Configurando el archivo persistence.xml
La aplicación YAPS Petstore viene configurado para una base de datos Derby, modificaremos nuestra configuración que se encuentra en el archivo persistence.xml
Agregar la siguiente linea

<jta-data-source>java:jboss/datasources/PetStoreDS</jta-data-source>

Comentamos las lineas

<!--<jta-data-source>java:global/jdbc/applicationPetstoreDS</jta-data-source> -->

<!--<property name="hibernate.dialect" value="org.hibernate.dialect.DerbyTenSevenDialect"/>-->



Nota: Guarda los cambios

Por último, editar la clase org.agoncal.application.petstore.service.DBPopulator y comentar la definición del DataSource

//@DataSourceDefinition(
//        className = "org.apache.derby.jdbc.EmbeddedDataSource",
//        name = "java:global/jdbc/applicationPetstoreDS",
//        user = "app",
//        password = "app",
//        databaseName = "applicationPetstoreDB",
//        properties = {"connectionAttributes=;create=true"}
//)


Ahora sí, ejecutamos el proyecto (Run), nos pedirá elegir el servidor.