domingo, 26 de octubre de 2025

Todos los comandos Git


🧱 Configuración inicial


• git config --global user.name "Tu Nombre"

• git config --global user.email "tu@email.com"

• git config --list

• git help <comando>



---


📁 Repositorios


• git init — Inicializa un nuevo repositorio local

• git clone <url> — Clona un repositorio remoto



---


📄 Archivos y cambios


• git status — Muestra el estado del repositorio

• git add <archivo> — Añade archivos al área de staging

• git add . — Añade todos los archivos modificados

• git restore <archivo> — Revierte cambios en el archivo

• git rm <archivo> — Elimina un archivo del repositorio



---


💾 Commits


• git commit -m "mensaje" — Crea un commit con mensaje

• git commit -am "mensaje" — Añade y commitea en un solo paso

• git log — Muestra el historial de commits

• git show <hash> — Muestra detalles de un commit específico



---


🌳 Ramas


• git branch — Lista las ramas

• git branch <nombre> — Crea una nueva rama

• git checkout <rama> — Cambia de rama

• git switch <rama> — Alternativa moderna a checkout

• git merge <rama> — Fusiona una rama en la actual

• git branch -d <rama> — Elimina una rama



---


🔄 Sincronización remota


• git remote -v — Verifica los repositorios remotos

• git fetch — Descarga cambios sin fusionar

• git pull — Descarga y fusiona cambios remotos

• git push — Envía tus commits al repositorio remoto



---


🧪 Revisión y corrección


• git diff — Muestra diferencias entre archivos

• git stash — Guarda cambios sin commitear

• git stash pop — Recupera los cambios guardados

• git revert <hash> — Revierte un commit específico

• git reset --hard <hash> — Restablece el repositorio a un estado anterior



---


🧠 Avanzado


• git tag — Lista o crea etiquetas

• git cherry-pick <hash> — Aplica un commit específico

• git rebase <rama> — Reescribe el historial de commits

• git blame <archivo> — Muestra quién modificó cada línea



---


¿Quieres que te prepare una hoja de referencia en PDF o que te ayude a practicar con ejemplos? También puedo ayudarte a crear un flujo de trabajo con Git para tus proyectos con Raspberry Pi o Spring Boot.

miércoles, 7 de agosto de 2024

Maven - Solución al error failOnNoGitDirectory

  Desde la version 2.0.4 el flag failOnNoGitDirectory es true por defecto. Setea el flag a false para omitir cuando el directorio .git no exista


<build>

    <plugins>

        <plugin>

            <groupId>pl.project13.maven</groupId>

            <artifactId>git-commit-id-plugin</artifactId>

            <configuration>

                <failOnNoGitDirectory>false</failOnNoGitDirectory>

            </configuration> 

        </plugin>

    </plugins>

</build>

sábado, 18 de noviembre de 2023

Mortal kombat 11: todos los fatalities

 

Estos son todos los Fatalities de los personajes de Mortal Kombat 11 Ultimate y cómo hacerlos en PS4, PS4, Xbox One, Series X y Nintendo Switch. Acaba con brutalidad con tus enemigos con nuestra guía.

Todos los Fatalities de Mortal Kombat 11 Ultimate y cómo hacerlos - Mortal Kombat 11

Mortal Kombat no sería lo mismo sin sus Fatalities, unos movimientos especiales con los que podremos rematar de una forma muy sangrienta a nuestro rival cuando lo hayamos derrotado, sometiéndolo de esta manera a la humillación definitiva.

Cada uno de los personajes del plantel cuenta con dos Fatalities distintos, aunque al principio la lista de movimientos solo nos mostrará el comando de uno de ellos, pudiendo desbloquear la secuencia de botones del segundo encontrándola en alguno de los cofres de la Kripta.

Por suerte, aunque el título no nos diga cómo realizarlos, si sabemos el comando en cuestión los podremos usar siempre que queramos y por ello hemos decidido recoger en esta entrada las combinaciones de cada uno de los Fatalities.



Baraka

Materia de reflexión (cerca)

  • PS4/PS5: Atrás, Abajo, Atrás, Triángulo
  • Xbox One/Series X: Atrás, Abajo, Atrás, Y
  • Switch: Atrás, Abajo, Atrás, X

Piedra, papel, Baraka (cerca)

  • PS4/PS5: Atrás, Adelante, Atrás, X
  • Xbox One/Series X: Atrás, Adelante, Atrás, A
  • Switch: Atrás, Adelante, Atrás, B

Cassie Cage

TQM (media distancia)

  • PS4/PS5: Abajo, Abajo, Adelante, Círculo
  • Xbox One/Series X: Abajo, Abajo, Adelante, B
  • Switch: Abajo, Abajo, Adelante, A

#ChicasAlPoder (lejos)

  • PS4/PS5: Atrás, Abajo, Abajo, Atrás, Triángulo
  • Xbox One/Series X: Atrás, Abajo, Abajo, Atrás, Y
  • Switch: Atrás, Abajo, Abajo, Atrás, X

Cetrion

Mantén el equilibrio (media distancia)

  • PS4/PS5: Atrás, Abajo, Adelante, Abajo, Círculo
  • Xbox One/Series X: Atrás, Abajo, Adelante, Abajo, B
  • Switch: Atrás, Abajo, Adelante, Abajo, Círculo, A

El bien y el mal (media distancia)

  • PS4/PS5: Atrás, Abajo, Atrás, X
  • Xbox One/Series X: Atrás, Abajo, Atrás, A
  • Switch: Atrás, Abajo, Atrás, B

D'vorah

Nuevas especies (cerca)

  • PS4/PS5: Atrás, Adelante, Atrás, X
  • Xbox One/Series X: Atrás, Adelante, Atrás, A
  • Switch: Atrás, Adelante, Atrás, B

Inmortal (media distancia)

  • PS4/PS5: Atrás, Abajo, Abajo, Círculo
  • Xbox One/Series X: Atrás, Abajo, Abajo, B
  • Switch: Atrás, Abajo, Abajo, A

Erron Black

Fundido (media distancia)

  • PS4/PS5: Abajo, Abajo, Abajo, Cuadrado
  • Xbox One/Series X: Abajo, Abajo, Abajo, X
  • Switch: Abajo, Abajo, Abajo, Y

Arma mortal (media distancia)

  • PS4/PS5: Abajo, Adelante, Abajo, Triángulo
  • Xbox One/Series X: Abajo, Adelante, Abajo, Y
  • Switch: Abajo, Adelante, Abajo, X

Frost

Escultura de hielo (cerca)

  • PS4/PS5: Adelante, Atrás, Abajo, Cuadrado
  • Xbox One/Series X: Adelante, Atrás, Abajo, X
  • Switch: Adelante, Atrás, Abajo, Y

Iniciativa Cibernética (media distancia)

  • PS4/PS5: Atrás, Adelante, Abajo, Adelante, Círculo
  • Xbox One/Series X: Atrás, Adelante, Abajo, Adelante, B
  • Switch: Atrás, Adelante, Abajo, Adelante, A

Geras

Atravesando el tiempo (cualquier distancia)

  • PS4/PS5: Atrás, Abajo, Abajo, X
  • Xbox One/Series X: Atrás, Abajo, Abajo, A
  • Switch: Atrás, Abajo, Abajo, B

Rechazo (cerca)

  • PS4/PS5: Abajo, Adelante, Atrás, Cuadrado
  • Xbox One/Series X: Abajo, Adelante, Atrás, X
  • Switch: Abajo, Adelante, Atrás, Y

Jade

Arrodíllate (cualquier posición)

  • PS4/PS5: Abajo, Abajo, Adelante, Abajo, Círculo
  • Xbox One/Series X: Abajo, Abajo, Adelante, Abajo, B
  • Switch: Abajo, Abajo, Adelante, Abajo, A

Baile con bastón (cerca)

  • PS4/PS5: Atrás, Adelante, Abajo, Adelante, Cuadrado
  • Xbox One/Series X: Atrás, Adelante, Abajo, Adelante, X
  • Switch: Atrás, Adelante, Abajo, Adelante, Y

Jacqui Briggs

Arañas explosivas (media distancia)

  • PS4/PS5: Adelante, Atrás, Adelante, X
  • Xbox One/Series X: Adelante, Atrás, Adelante, A
  • Switch: Adelante, Atrás, Adelante, B

Jugada redonda (media distancia)

  • PS4/PS5: Atrás, Adelante, Atrás, Círculo
  • Xbox One/Series X: Atrás, Adelante, Atrás, B
  • Switch: Atrás, Adelante, Atrás, A

Jax Briggs

Como una moto (cerca)

  • PS4/PS5: Adelante, Abajo, Adelante, X
  • Xbox One/Series X: Adelante, Abajo, Adelante, A
  • Switch: Adelante, Abajo, Adelante, B

En forma (cerca)

  • PS4/PS5: Atrás, Adelante, Atrás, Abajo, Cuadrado
  • Xbox One/Series X: Atrás, Adelante, Atrás, Abajo, X
  • Switch: Atrás, Adelante, Atrás, Abajo, Y

Johnny Cage

Zona del señor Cage (cerca)

  • PS4/PS5: Adelante, Atrás, Abajo, Abajo, Círculo
  • Xbox One/Series X: Adelante, Atrás, Abajo, Abajo, B
  • Switch: Adelante, Atrás, Abajo, Abajo, A

¿De dónde ha salido este personaje? (cerca)

  • PS4/PS5: Adelante, Abajo, Adelante, Cuadrado
  • Xbox One/Series X: Adelante, Abajo, Adelante, X
  • Switch: Adelante, Abajo, Adelante, Y

Kabal

Ataque abrasivo (lejos)

  • PS4/PS5: Atrás, Adelante, Abajo, Adelante, X
  • Xbox One/Series X: Atrás, Adelante, Abajo, Adelante, A
  • Switch: Atrás, Adelante, Abajo, Adelante, B

Enganchado (cerca)

  • PS4/PS5: Abajo, Abajo, Abajo, Círculo
  • Xbox One/Series X: Abajo, Abajo, Abajo, B
  • Switch: Abajo, Abajo, Abajo, A

Kano

Último baile (cerca)

  • PS4/PS5: Adelante, Abajo, Abajo, Cuadrado
  • Xbox One/Series X: Adelante, Abajo, Abajo, X
  • Switch: Adelante, Abajo, Abajo, Y

Adefesio (cerca)

  • PS4/PS5: Atrás, Abajo, Adelante, Triángulo
  • Xbox One/Series X: Atrás, Abajo, Adelante, Y
  • Switch: Atrás, Abajo, Adelante, X

Kollector

Para la Colección (cerca)

  • PS4/PS5: Abajo, Abajo, Abajo, Abajo, X
  • Xbox One/Series X: Abajo, Abajo, Abajo, Abajo, A
  • Switch: Abajo, Abajo, Abajo, Abajo, B

Se hizo la luz (cerca)

  • PS4/PS5: Abajo, Adelante, Atrás, Cuadrado
  • Xbox One/Series X: Abajo, Adelante, Atrás, X
  • Switch: Abajo, Adelante, Atrás, Y

Kotal Kahn

Tótem del sacrificio (cerca)

  • PS4/PS5: Atrás, Abajo, Atrás, X
  • Xbox One/Series X: Atrás, Abajo, Atrás, A
  • Switch: Atrás, Abajo, Atrás, B

Comida para gatos (cerca)

  • PS4/PS5: Atrás, Abajo, Atrás, Adelante, Cuadrado
  • Xbox One/Series X: Atrás, Abajo, Atrás, Adelante, X
  • Switch: Atrás, Abajo, Atrás, Adelante, Y

Kitana

Tornado sangriento (media distancia)

  • PS4/PS5: Abajo, Abajo, Abajo, Abajo, Triángulo
  • Xbox One/Series X: Abajo, Abajo, Abajo, Abajo, Y
  • Switch: Abajo, Abajo, Abajo, Abajo, X

Ejecución real (media distancia)

  • PS4/PS5: Abajo, Atrás, Adelante, Cuadrado
  • Xbox One/Series X: Abajo, Atrás, Adelante, X
  • Switch: Abajo, Atrás, Adelante, Y

Kung Lao

Sin rumbo (cerca)

  • PS4/PS5: Abajo, Adelante, Atrás, Abajo, Triángulo
  • Xbox One/Series X: Abajo, Adelante, Atrás, Abajo, Y
  • Switch: Abajo, Adelante, Atrás, Abajo, X

Rebanacarne (cerca)

  • PS4/PS5: Abajo, Adelante, Abajo, X
  • Xbox One/Series X: Abajo, Adelante, Abajo, A
  • Switch: Abajo, Adelante, Abajo, B

Liu Kang

Quemado (cerca)

  • PS4/PS5: Abajo, Atrás, Abajo, Adelante, Cuadrado
  • Xbox One/Series X: Abajo, Atrás, Abajo, Adelante, X
  • Switch: Abajo, Atrás, Abajo, Adelante, Y

Las entrañas de la bestia (media distancia)

  • PS4/PS5: Atrás, Abajo, Atrás, Adelante, Triángulo
  • Xbox One/Series X: Atrás, Abajo, Atrás, Adelante, Y
  • Switch: Atrás, Abajo, Atrás, Adelante, X

Noob Saibot

Decisión dividida (media distancia)

  • PS4/PS5: Atrás, Adelante, Atrás, Adelante, Círculo
  • Xbox One/Series X: Atrás, Adelante, Atrás, Adelante, A
  • Switch: Atrás, Adelante, Atrás, Adelante, B

Problema por duplicado (cerca)

  • PS4/PS5: Abajo, Abajo, Abajo, Cuadrado
  • Xbox One/Series X: Abajo, Abajo, Abajo, X
  • Switch: Abajo, Abajo, Abajo, Y

Raiden

Corriente alterna (media distancia)

  • PS4/PS5: Atrás, Abajo, Atrás, Cuadrado
  • Xbox One/Series X: Atrás, Abajo, Atrás, X
  • Switch: Atrás, Abajo, Atrás, Y

Corriente continua (cerca)

  • PS4/PS5: Abajo, Adelante, Atrás, X
  • Xbox One/Series X: Abajo, Adelante, Atrás, A
  • Switch: Abajo, Adelante, Atrás, B

Scorpion

Eres el siguiente (lejos)

  • PS4/PS5: Atrás, Abajo, Abajo, Cuadrado
  • Xbox One/Series X: Atrás, Abajo, Abajo, X
  • Switch: Atrás, Abajo, Abajo, Y

Reacción en cadena (lejos)

  • PS4/PS5: Abajo, Adelante, Atrás, Triángulo
  • Xbox One/Series X: Abajo, Adelante, Atrás, Y
  • Switch: Abajo, Adelante, Atrás, X

Skarlet

Desastre sangriento (media distancia)

  • PS4/PS5: Adelante, Atrás, Abajo, X
  • Xbox One/Series X: Adelante, Atrás, Abajo, A
  • Switch: Adelante, Atrás, Abajo, B

Problemas cardíacos (media distancia)

  • PS4/PS5: Abajo, Abajo, Adelante, Círculo
  • Xbox One/Series X: Abajo, Abajo, Adelante, B
  • Switch: Abajo, Abajo, Adelante, A

Shao Kahn

Espalda reventada (cerca)

  • PS4/PS5: Atrás, Adelante, Abajo, Abajo, Triángulo
  • Xbox One/Series X: Atrás, Adelante, Abajo, Abajo, Y
  • Switch: Atrás, Adelante, Abajo, Abajo, X

Kahn secuencias (cerca)

  • PS4/PS5: Atrás, Adelante, Atrás, Cuadrado
  • Xbox One/Series X: Atrás, Adelante, Atrás, X
  • Switch: Atrás, Adelante, Atrás, Y

Sonya Blade

Retirada (media distancia)

  • PS4/PS5: Abajo, Adelante, Atrás, Triángulo
  • Xbox One/Series X: Abajo, Adelante, Atrás, Y
  • Switch: Abajo, Adelante, Atrás, X

Entrega de suministros (cerca)

  • PS4/PS5: Atrás, Adelante, Abajo, X
  • Xbox One/Series X: Atrás, Adelante, Abajo, A
  • Switch: Atrás, Adelante, Abajo, B

Sub-Zero

Maestro del hielo (media distancia)

  • PS4/PS5: Atrás, Adelante, Atrás, Triángulo
  • Xbox One/Series X: Atrás, Adelante, Atrás, Y
  • Switch: Atrás, Adelante, Atrás, X

Congelado en el tiempo (lejos)

  • PS4/PS5: Adelante, Abajo, Adelante, Círculo
  • Xbox One/Series X: Adelante, Abajo, Adelante, B
  • Switch: Adelante, Abajo, Adelante, A

Shang Tsung

Condenado a los malditos (media distancia)

  • PS4/PS5: Atrás, Adelante, Abajo, Abajo, Cuadrado
  • Xbox One/Series X: Atrás, Adelante, Abajo, Abajo, B
  • Switch: Atrás, Adelante, Abajo, Abajo, A

Reencarnación shokan (media distancia)

  • PS4/PS5: Atrás, Adelante, Abajo, Círculo
  • Xbox One/Series X: Atrás, Adelante, Abajo, B
  • Switch: Atrás, Adelante, Abajo, A

Rambo

Directo al Valhalla (media distancia)

  • PS4/PS5: Atrás, Adelante, Abajo, Cuadrado.
  • Xbox One/Series X: Atrás, Adelante, Abajo, X.
  • Switch: Atrás, Adelante, Abajo, Y.

A la parrilla (cerca)

  • PS4/PS5: Abajo, Adelante, Abajo, Círculo.
  • Xbox One/Series X: Abajo, Adelante, Abajo, B.
  • Switch: Abajo, Adelante, Abajo, A.

Rain

Ojo conmigo (cualquier distancia)

  • PS4/PS5: Atrás, Adelante, Atrás, Abajo, Triángulo.
  • Xbox One/Series X: Atrás, Adelante, Atrás, Abajo, Y.
  • Switch: Atrás, Adelante, Atrás, Abajo, X.

Limpieza a presión (cerca)

  • PS4/PS5: Atrás, Abajo, Abajo, Cuadrado.
  • Xbox One/Series X: Atrás, Abajo, Abajo, X.
  • Switch: Atrás, Abajo, Abajo, Y.

Mileena

Giro descontrolado (media distancia)

  • PS4/PS5: Atrás, Abajo, Atrás, Triángulo.
  • Xbox One/Series X: Atrás, Abajo, Atrás, Y.
  • Switch: Atrás, Abajo, Atrás, X.

Placeres violentos (cerca)

  • PS4/PS5: Adelante, Abajo, Abajo, Círculo.
  • Xbox One/Series X: Adelante, Abajo, Abajo, B.
  • Switch: Adelante, Abajo, Abajo, A.

Robocop

Vivo o muerto (cerca)

  • PS4/PS5: Atrás, Adelante, Abajo, Abajo, Triángulo.
  • Xbox One/Series X: Atrás, Adelante, Abajo, Abajo, Y.
  • Switch: Atrás, Adelante, Abajo, Abajo, Y.

Gracias por tu cooperación (media distancia)

  • PS4/PS5: Adelante, Abajo, Adelante, Cuadrado.
  • Xbox One/Series X: Adelante, Abajo, Adelante, X.
  • Switch: Adelante, Abajo, Adelante, Y.

Sheeva

Pisotéalo (cerca)

  • PS4/PS5: Abajo, Abajo, Abajo, Cuadrado.
  • Xbox One/Series X: Abajo, Abajo, Abajo, X.
  • Switch: Abajo, Abajo, Abajo, Y.

Punción lumbar (cerca)

  • PS4/PS5: Adelante, Abajo, Abajo, Adelante, X.
  • Xbox One/Series X: delante, Abajo, Abajo, Adelante, A.
  • Switch: delante, Abajo, Abajo, Adelante, B.

Fujin

Hoja del viento (lejos)

  • PS4/PS5: Atrás, Abajo, Abajo, Atrás, Cuadrado.
  • Xbox One/Series X: Atrás, Abajo, Abajo, Atrás, X.
  • Switch: Atrás, Abajo, Abajo, Atrás, Y.

Tornado atormentado (cerca)

  • PS4/PS5: Adelante, Atrás, Abajo, Triángulo.
  • Xbox One/Series X: Adelante, Atrás, Abajo, Y.
  • Switch: Adelante, Atrás, Abajo, X.

Spawn

Aquí yacen tus restos (media distancia)

  • PS4/PS5: Adelante, Atrás, Abajo, Abajo, X.
  • Xbox One/Series X: Adelante, Atrás, Abajo, Abajo, A.
  • Switch: Adelante, Atrás, Abajo, Abajo, B.

Desencadenado (media distancia)

  • PS4/PS5: Adelante, Atrás, Abajo, Triángulo.
  • Xbox One/Series X: Adelante, Atrás, Abajo, Y.
  • Switch: Adelante, Atrás, Abajo, A.

El Joker

Aguafiestas (media distancia)

  • PS4/PS5: Abajo, Adelante, Atrás, Triángulo.
  • Xbox One/Series X: Abajo, Adelante, Atrás, Y.
  • Switch: Abajo, Adelante, Atrás, X.

Matarile, rile, rile (media distancia)

  • PS4/PS5: Atrás, Adelante, Arriba, Círculo.
  • Xbox One/Series X: Atrás, Adelante, Arriba, B.
  • Switch: Atrás, Adelante, Arriba, Y.

Terminator T-800

He vuelto (cerca)

  • PS4/PS5: Atrás, Adelante, Atrás, Cuadrado.
  • Xbox One/Series X: Atrás, Adelante, Atrás, X.
  • Switch: Atrás, Adelante, Atrás, Y.

Blanco exterminado (media distancia)

  • PS4/PS5: Abajo, Adelante, Abajo, Círculo.
  • Xbox One/Series X: Abajo, Adelante, Abajo, B.
  • Switch: Abajo, Adelante, Abajo, A.

Nightwolf

Komo-tose

  • PS4/PS5: Abajo, Abajo, Abajo, Círculo.
  • Xbox One/Series X: Abajo, Abajo, Abajo, B.
  • Switch: Abajo, Abajo, Abajo, X.

Ritual de guerra

  • PS4/PS5: Atrás, Adelante, Atrás, Adelante, Triángulo.
  • Xbox One/Series X: Atrás, Adelante, Atrás, Adelante, Y.
  • Switch: Atrás, Adelante, Atrás, Adelante, A.

Sindel

Reina del grito (cerca)

  • PS4/PS5: Abajo, Abajo, Adelante, Círculo.
  • Xbox One/Series X: Abajo, Abajo, Adelante, B.
  • Switch: Abajo, Abajo, Adelante, A.

Con pelos y señales (media distancia)

  • PS4/PS5: Abajo, Abajo, Abajo, Cuadrado.
  • Xbox One/Series X: Abajo, Abajo, Abajo, X.
  • Switch: Abajo, Abajo, Abajo, Y.

domingo, 12 de noviembre de 2023

Preservacion: Juegos de nintendo NES

https://ia801806.us.archive.org/3/items/nes-romset-ultra-us/Nintendo_Entertainment_System_Model.png 

 

 Aca dejo la lista de juegos a modo de preservacion. En este blog no se fomenta la pirateria ni tiene link con contenido ilegal.

Archive.org es una organización para preservar todo el contenido digital existente y los juegos de nes caen en esta categoria.


https://archive.org/download/nes-romset-ultra-us

https://archive.org/download/NintendoMultiRomCollectionByGhostware 

https://archive.org/download/nointro.nes

miércoles, 8 de noviembre de 2023

Hot wheels - evolution

La evolución es brutal, obviamente entre los primeros juegos de ps1 hasta la llegada del unleashed 2 de ps4 o ps5 la esencia es la misma, solo cambia la evolución de los gráficos de tecnología.

jueves, 4 de mayo de 2023

Lombok - Ejemplos practicos utiles para tu desarrollo en Java

 Lombok es un proyecto que tiene la finalidad facilitar el desarrollo de software en Java y escribir menos codigo y hacer mas, cosa que es muy bueno.


@Getter and @Setter

Si bien los entornos de desarrollo nos permite generar los getter y setter con un par de click, Lombok nos permite anotar cualquier campo con las anotaciones Getter y Setter para generar automáticamente

Los métodos get y set serán públicos a no ser que se especifique pasándole un parámetro a la anotación a través de la clase AccessLevel. Los niveles de acceso que se permiten son PUBLIC, PROTECTED, PACKAGE y PRIVATE.

Adicionalmente también podemos desactivar la generación de los métodos _get y set para un determinado campo si ponemos el nivel de acceso NONE.

Debemos de tener en cuenta que en los método anotados con @Getter podemos indicar el parámetros “lazy” que actúa de forma similar a como se hace desde JPA al anotar los campos de una entidad

De esta manera el valor de dicho campo se almacenará en caché y solo se calcula una vez, ideal para archivos pesados.


@ToString

Cualquier clase puede ser anotada con @ToString para generar una implementación del método toString (). De forma predeterminada, imprimirá el nombre de la clase, junto con cada campo, en orden, separados por comas.

El parámetro includeFieldNames, lo cual nos puede dar mayor legibilidad.

Por defecto, se imprimirán todos los campos no estáticos. Si desea omitir algunos campos, puede anotar estos campos con @ToString.Exclude.

De forma alternativa, puede especificar exactamente qué campos desea utilizar con onlyExplicitlyIncluded = true y luego marcar cada campo que desee incluir con @ToString.Include.

También podemos obtener el resultado del método ToString de la clase super indicando el parámetro callSuper=true.


@NonNull

El parámetro de entrada de un método o de un constructor conseguimos despreocuparnos del checkeo de que ese parámetro de entrada sea nulo. Esta anotación realiza esta sentencia:

if (parametro == null) throw new NullPointerException("parametro");

Para los constructores el chequeo se realizará inmediatamente después de cualquier llamada al this() o super().

 

@EqualsAndHashCode

Genera los métodos equals() y hashCode() a partir de los campos del objeto. De forma predeterminada para generar estos métodos utiliza todos los campos de la clase no transitorios y no estáticos, aunque podemos modificar los campos que se utilizan utilizando @EqualsAndHashCode.Include o @EqualsAndHashCode.Exclude.

Si utilizamos el Include adicionalmente tenemos que indicar lo siguiente onlyExplicitlyIncluded = true

 

@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor

Genera constructores que no toman argumentos, un argumento por campo final/no nulo, o un argumento por cada campo.

  • @NoArgsConstructor generará un constructor sin parámetros. Si esto no es posible (debido a los campos finales), en su lugar se producirá un error de compilación, a menos que se utilice @NoArgsConstructor (force = true).

Luego todos los campos finales se inicializan con 0/falso/nulo. Para los campos con restricciones, como los campos @NonNull, no se genera ninguna verificación, así que tenga en cuenta que estas restricciones generalmente no se cumplirán hasta que esos campos se inicien correctamente más tarde.

  • @RequiredArgsConstructor genera un constructor con un parámetro para cada campo que requiere un manejo especial. Todos los campos finales no inicializados obtienen un parámetro, así como también los campos que están marcados como @NonNull que no se inicializan donde se declaran.
  • @AllArgsConstructor genera un constructor con un parámetro para cada campo en su clase.

Cada una de estas anotaciones permite una forma alternativa, donde el constructor generado es siempre privado, y se genera un método estático adicional que envuelve al constructor privado.

 

@Data

@Data es la anotación de acceso directo que agrupa las características de @ToString, @EqualsAndHashCode, @Getter/@Setter y @RequiredArgsConstructor juntas: en otras palabras, @Data genera todos los estándares que normalmente se asocian con POJOS y beans:

  • Getters para todos los campos.
  • Setters para todos los campos no finales y las implementaciones toString.
  • Equals y hashCode que involucran los campos de la clase.
  • Un constructor que inicializa todos los campos finales.
  • Así como todos los campos no finales sin inicializador que haya sido marcado con @NonNull, para garantizar que el campo nunca sea nulo.

 

 

 

 

 

Generar JavaDoc con maven

Hay una manera rapida y eficaz para poder generar la documentacion javadoc usando maven. 

Recordar que tu codigo debe tener los siguientes comentarios

 /** 

         Ejemplo de documentacion JavaDoc 

*/ 

 

Se debe ejecutar el siguiente comando: mvn javadoc:javadoc

 Esto generara la documentacion en la siguiente carpeta target/site/apidocs 

Puedes cambiar la carpeta por medio de la configuracion del plugin en la siguiente entrada reportOutputDirectory 

Espero que les sirva de ayuda Recordar que es importante la documentacion para el resto de los desarrolladores que van a mantener tu codigo.

martes, 24 de noviembre de 2009

Prevenir en php el insert duplicado

$c=OCILogon("scott", "tiger", "orcl");
if ( ! $c ) {
echo "Unable to connect: " . var_dump( OCIError() );
die();
}
$mydupcheck = "select * from personTable where firstname = $_POST[firstname] and lastname = $_POST[lastname] and emailaddress = $_POST[emailaddress]";

if($mydupcheck)
{
echo "Duplicate entry";
}
else
{
$s = OCIParse($c, "INSERT INTO personTable (firstname,lastname,emailaddress) VALUES ($_POST[firstname],'$_POST[lastname]','$_POST[emailaddress]'");
OCIExecute($s, OCI_DEFAULT);
echo "Record successfully entered";
}
?>

domingo, 1 de noviembre de 2009

Insertar Fecha con PHP en MySQL

Una manera fácil de insertar la fecha actual con PHP en una base de datos MySQL puede ser la siguiente:

$date = date("Y-m-d");
mysql_query("INSERT INTO date_table VALUES ('$name', '$date')", $db_connection);
?>

Para obtener el timestamp de Unix a partir de un campo Fecha, puede utilizar una función como la que se muestra a continuación:

// Devuelve Unix timestamp de una fecha MySQL en formato YYYY-MM-DD
function mysqldate_to_unix_timestamp($date) {

list($year, $month, $day) = explode('-', format_date( $date) );
return mktime(0, 0, 0, $month, $day, $year);
}
?>

Fuente: WebLatam.com

domingo, 27 de septiembre de 2009

IReport y Jdeveloper 10g parte 2

en esta segunda parte veremos como gestionar los archivos jasper desde JDeveloper y como pasar los parametros que necesita el reporte.
Debemos copiar desde la carpeta lib de nuestro IReport, los siguientes jar :

itext-1.3.1.jar
jasperreports-2.0.4.jar
jasperreports-extensions-1.3.1.jar
poi-2.5.1-final-20040804






Luego pegarlos en la carpeta WEB-INF/lib de nuestro proyecto web.
En la lista podemos ver las librerias itext y el poi, estas librerias nos serviran para los reportes en pdf y excel respectivamente.

Debemos crear una carpeta dentro del WEB-INF, su nombre sera "reports", al interior de este carpeta pegaremos el archivo mi_reporte_javix.jasper (recuerde que este archivo lo generamos en el anterior articulo), este archivo se encuentra en la carpeta principal de su IReport.

Vamos al proyecto ViewController darle doble clic y agregaremos las librerias,darle clic al boton add Jar/Directory

















Finalmente quedaria de esta manera:






















Ahora vamos al faces-config.xml y diseñamos la siguiente navegacion entre paginas:













Tenemos dos paginas , la navegacion tiene el nombre de "dialog:jspreporte".
El diseño de la pagina index.jsp seria el siguiente:



















Modifique las siguientes propiedades del boton "Generar Reporte":
useWindow="true"
windowHeight="800"
windowWidth="600"

Debe capturar el valor del selectonechoice que almacena el area luego cargarlo como variable session a idarea.
Programacion del boton "generar reporte" en el backing:


FacesContext context = javax.faces.context.FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) context.getExternalContext().getSession(false);
session.setAttribute("idarea",idarea);
return "dialog:jspreporte";

Para generar el reporte necesita una conexion a una base de datos, en este caso se puede tomar la conexion existente del datasource original, o tambien crear una propia conexion a la base de datos, optaremos por esta opcion, entonces debera crear una clase "OracleDBConn".


package com.javix.pe.model.db;

import java.sql.Connection;
import java.sql.DriverManager;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class OracleDBConn {
/**
*Registramos el driver
*/
static {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (Exception e) {
System.out.println("Ocurrió un problema con el driver\n" + e);
}
}
/**
* Obtiene una conexión a la Base de Datos.
*/
public Connection getConexion() {
Connection connection = null;
try {
connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","blog","blog");
} catch (Exception e) {
System.out.println("Ocurrió un problema al obtener la conexión\n" + e);
}
return connection;
}
}


Continuando ya se tiene el archivo reporte, la clase de conexion, ahora falta la pagina que soportara el reporte, para este ejemplo ejecutaremos un reporte en pdf y al dar clic al boton "generar reporte" automaticamente debera aparecer una ventana emergente mostrando un pdf con la informacion solicitada.



Para ello debemos programar la pagina reporte.jsp con el siguiente codigo:




"http :// www . w3 . org/TR/html4/loose.dtd">



<%@ page import="net.sf.jasperreports.engine.*" %>



<%@ page import="net.sf.jasperreports.engine.design.*" %>



<%@ page import="net.sf.jasperreports.engine.data.*"%>



<%@ page import="net.sf.jasperreports.engine.export.*"%>





<%@ page import="net.sf.jasperreports.engine.util.*"%>



<%@ page import="net.sf.jasperreports.view.*"%>



<%@ page import="net.sf.jasperreports.view.save.*"%>





<%@ page import="java.sql.*"%>



<%@ page import="java.util.*" %>



<%@ page import="java.io.*" %>



<%@ page contentType="text/html;charset=windows-1252"%>





Reporte Javier Calizaya!











<%



try{

com.javix.pe.model.db.OracleDBConn objDBConn =new com.javix.pe.model.db.OracleDBConn() ;

Connection conn = null ;





conn = objDBConn.getConexion();





System.setProperty("jasper.reports.compile.class.path",application.getRealPath("/WEB-INF/lib/jasperreports-2.0.4.jar") +



System.getProperty("path.separator") +



application.getRealPath("/WEB-INF/classes/")



);





System.setProperty(



"jasper.reports.compile.temp",



application.getRealPath("/reports/")



);



File reportFile = new File(application.getRealPath("/reports/mi_reporte_javix.jasper"));

Map parameters = new HashMap();

javax.faces.context.FacesContext context = javax.faces.context.FacesContext.getCurrentInstance();

parameters.put("idlocal",session.getAttribute("idarea").toString());



byte[] bytes =JasperRunManager.runReportToPdf(reportFile.getPath(),parameters,conn);

response.setContentType("application/pdf");

response.setContentLength(bytes.length);

ServletOutputStream ouputStream = response.getOutputStream();

ouputStream.write(bytes, 0, bytes.length);

ouputStream.flush();

ouputStream.close();



}catch (JRException e)



{System.out.println("Error:" +e.getMessage());}



catch (Exception e)



{



e.printStackTrace();



System.out.println("Error2:" +e.getMessage());

}



%>

















Ejecutar la pagina index.jsp:



















Fuente: http://javixoracle.blogspot.com/

IReport y Jdeveloper 10g parte 1

JDeveloper 10.1.3.4.0

IReport 2.0.4


1. El esquema que utilizare es algo sencillo, a ver:












El codigo sql :

CREATE TABLE TBAREA
(
IDAREA NUMBER NOT NULL,
DESAREA VARCHAR2(100),
FECHACREACION DATE
)
;
CREATE TABLE TBPERSONAL
(
IDPERSONAL NUMBER NOT NULL,
PERNOMBRE VARCHAR2(100),
PERPATERNO VARCHAR2(100),
PERMATERNO VARCHAR2(100),
DIRECCION VARCHAR2(100),
IDAREA NUMBER
)
;
ALTER TABLE TBAREA
ADD CONSTRAINT TBAREA_PK PRIMARY KEY
(
IDAREA
)
ENABLE
;
ALTER TABLE TBPERSONAL
ADD CONSTRAINT TBPERSONAL_PK PRIMARY KEY
(
IDPERSONAL
)
ENABLE
;
ALTER TABLE TBPERSONAL
ADD CONSTRAINT TBPERSONAL_TBAREA_FK1 FOREIGN KEY
(
IDAREA
)
REFERENCES TBAREA
(
IDAREA
) ENABLE
;




2. Configurar el IReport
Debemos tener a la mano el driver de oracle (ojdbc14.jar) y colocarlo en la carpeta /home/JasperSoft/IReport-2.0.4/lib



Si no lo tienen cerca el driver, pueden buscarlo dentro de las librerias de su JDeveloper.
Ahora abriremos el IReport, y deben darle clic a options/classpath
Aparecera esta ventana:



















Dar clic al boton add Jar, buscar el driver oracle que antes pegamos en la carpeta lib del IReport.


Ahora darle clic al menu Data / Connections - Datasources


Aparecera una ventana , debes darle clic al boton "new".


En la nueva ventana seleccionar "Database JDBC Connection" y darle al next!

La parte final de la configuracion, deberas colocar los parametros de tu conexion, en mi caso es el siguiente:
























Eso finaliza nuestra parte de configurar el IReport con nuestro Oracle.

3. Ahora vamos a darle clic al menu File / new Document
Le damos un nombre y unas caracteristicas adicionales a nuestro reporte.






















Dar clic al menu Data / Report Query , ahora digitaremos un query sencillo:


SELECT A."DESAREA",
P."PERNOMBRE",
P."PERPATERNO",
P."PERMATERNO",
P."DIRECCION",
P."IDAREA" AS P_IDAREA,
P."IDPERSONAL" AS P_IDPERSONAL,
A."IDAREA" AS A_IDAREA,
A."FECHACREACION" AS A_FECHACREACION
FROM
"TBPERSONAL" P INNER JOIN "TBAREA" A ON P."IDAREA" = A."IDAREA"
WHERE
a.idarea= $P{idlocal}


Si nos fijamos el query tiene un parametro, asi que vamos a la parte inferior derecha del IDE, en el panel de "document structure" y le damos clic derecho parameters/add.


El nombre de nuestro parametro es IDLOCAL y el tipo de dato por defecto sera String.



Hasta este punto asegurese de guardar todos los cambios.



En el "document structure" es factible ver todos los elementos de la plantilla reporte que tenemos.



Dentro del elemento "pageHeader" agregamos un objeto tipo staticText, y le damos de texto "REPORTE DE PERSONAL", para modificar las fuentes, tamaño del texto, puede ver en la parte derecha el panel de properties.



El diseño del reporte es sencillo, si desea puede agregar una imagen como logo, o tambien un rectangle que haga mas vistoso el titulo, en este caso agregare un rectangle y dentro de el colocare un static text, con el texto "AREA". Al costado de este static text, arrastrare desde el document structure el FIELD "DESAREA".



En la plantilla tambien del reporte, tambien existe el componente "columHeader", aqui procederemos a colocar static text que representen titulos de campo de toda informacion que se imprimira.



Finalmente nuestro reporte tendria esta forma:













Como notara los campos "FIELDS" se han colocado en la parte denominada "detail", mientras que los titulos de los campos van en la parte de "ColumHeader".




Ejecutar : menu build/ execute (with active connection)




(procure que el parametro idlocal tenga activada la opcion "use a promt")




















En la carpeta principal del IReport, notara que se ha generado el archivo : mi_reporte_javix.jrxml

Este archivo es el que utilizaremos para generar los reportes en pdf o excel desde el JDeveloper.

Fuente: http://javixoracle.blogspot.com/

Instalación y Configuración de la Base de Datos Oracle XE

Para la realización de nuestras prácticas con Jdeveloper i Oracle ADF vamos a utilizar la base de datos OracleXE. Se trata de un producto pensado para el desarrollo de aplicaciones de escritorio que necesiten una base de datos ligera y potente a la vez pero aún no estar pensado como servidor de datos en aplicaciones web J2EE vamos a utilizarlo como alternativa gratuita (sí leiste bien gratuita, algo a lo que los chicos de Orcle nos estan empezando a mal acostumbrar). Otras características son la facilidad de instalación y administración (mediante un entorno Web) o el hecho siempre agradecido de su disponibilidad en castellano. El instalador ocupa unos 230 MB de espacio en disco y puede descargar-se des de la siguiente dirección:

Descargar OracleXE

El post de hoy intenta guiar un poco el proceso de instalación de este DBR que utilizaremos como almacén para nuestros datos.Tras la pantalla de bienvenida:




I aceptando los términos de contrato, el asistente nos pedirá la ubicación donde queremos instalar oracleXE:

El siguiente punto del asistente es, probablemente, el más importante de todos. Aquí debemos introducir la contraseña para el usuario SYSTEM con el que podemos administrar la base de datos.


Tras especificar los datos requeridos el asistente se encargará de instalar la base de datos. Y voilà!!! Esto es todo lo que debemos hacer. Ya tenemos en nuestro equipo una base de datos Oracle para montar nuestro almacén de datos.

Acceder a la página de administración de nuestra base de datos es tan sencillo como abrir nuestro explorador Web e ir a la siguiente dirección:

http://127.0.0.1:8080/apex
En la que se nos muestra la página de acceso la administración de la base de datos. Una vez validados Correctamente (Usuario: SYSTEM Contraseña: la proporcionada en el momento de la instalación) accederemos a la página principal de administración. En el siguiente post veremos un resumen de las tareas más frecuentes y prepararemos el esquema de tablas sobre el que mantendremos los datos de nuestra aplicación.


Fuente: http://oracleadffaces.blogspot.com/