14 septiembre 2008

Encriptar password en Java

Descargar la libreria jasypt

Agregar los siguientes jar al proyecto (ver imagen)
Encriptar contraseñas

public static String encriptar(String passwordInput) {
ConfigurablePasswordEncryptor passwordEncryptor =
new ConfigurablePasswordEncryptor();
passwordEncryptor.setAlgorithm("SHA-1");
passwordEncryptor.setPlainDigest(true);
String encryptedPassword =
passwordEncryptor.encryptPassword(passwordInput);

return encryptedPassword;
}

Verificar si la contraseña es valida

public static boolean esValido(String passwordInput,
String passwordEncriptado) {
boolean valido = true;
ConfigurablePasswordEncryptor passwordEncryptor = new ConfigurablePasswordEncryptor();
passwordEncryptor.setAlgorithm("SHA-1");
passwordEncryptor.setPlainDigest(true);
if (!passwordEncryptor.checkPassword(passwordInput, passwordEncriptado)) {
valido = false;
}
return valido;
}

Funcion que recibe el password ingresado junto al password encriptado y retorna si son iguales o no.

Para ver mas ejemplos: click aqui

24 julio 2008

Reparar el arranque (MBR)

Si el arranque del computador se corrompió por que se quitó la partición, linux, por algun virus, o por "arte de magia" las posibles soluciones son:

Iniciar con el arranque de windows '98 y ejecutar

FDISK /MBR

Iniciar con el CD de Win XP, entrar a la consola reparación y escribir

FIXBOOT
FIXMBR

Iniciar con el DVD de Win Vista (alias bosta) seleccionar reparar, una vez dentro de la consola escribir:

BOOTREC /FIXMBR

Otra posible solucion es, descargar superGrub (no probado)

21 julio 2008

min-height CSS

Instruccion de altura minima, es necesario especificar el "min-height" y "height" ya que una instruccion es tomada por Firefox y la otra por IE.




   .idCapa{
     min-height: 400px;
     height: auto !important;
     height: 400px;
   }



13 julio 2008

Sentencias SQL :: Oracle 10g

Procesos

>> show parameters processes // ver cantidad de procesos

>> alter system set processes=200 scope=spfile; // modificar la cantidad de procesos

Sesiones


>> show parameters sessions // ver cantidad de sesiones

>> alter system set sessions=250 scope=spfile; // Modificar cantidad de sesiones

>> select count(*) from gv$session //contar las sesiones activas

06 julio 2008

Simple diversion ;)




--> http://usuarios.lycos.es/himura85/Flitzebogen.rar

PD: llegar al nivel 17 es CASI !!!! imposible :)

20 mayo 2008

JfreeChart

Una herramienta open source para agregar gráficos a nuestras aplicaciones, se descarga de (jfreechart) y junto a esta debemos descargar la librería jcommon, en la misma pagina encontraremos demos para conocer de los multiples beneficios.

Un buen enlace para encontrar ejemplo es javaWord

22 abril 2008

Import / export Oracle 10g

En la linea de comandos colocamos:

Para importar


imp USUARIO/PASS@xe fromuser=USER touser=USER_OLD file = c:\NOMBRE_ARCHIVO.dmp log = NOMBRE_LOG.log


Para exportar


Exp USUARIO/PASS@xe owner=OWNER file=C:\NOMBRE_ARCHIVO.dmp log=C:\NOMBRE_LOG.log

18 abril 2008

Lectura de archivos .properties

Los archivos properties tiene la siguiente estructura:

nombre=valor

Declaramos un propertieS

private Properties prop;


Para leer el archivo se crea un metodo como el siguiente:

 public void leeArchivo(String path) {
prop = new Properties();
InputStream is = null;
try {
is = new FileInputStream(path);
prop.load(is);
} catch (IOException e) {
e.printStackTrace();
}
}

Finalmente para extraer el valor adecuado utilizamos:

prop.getProperty("nombre");

06 abril 2008

Centrar capa con CSS

Como lograr que una pagina quede centrada?

en la hoja de estilo se debe agregar las siguientes instrucciones


#idCapa{
background-color: #FFF;
position: absolute;
position:relative;
width:500px;
height:400px;
margin:0px auto;
}



y luego en la pagina crear una capa con id="idCapa"

30 marzo 2008

Cambios que implican una pequeña inversión, luego de ceder el DELL a mi hermano me vi en la obligación de cotizar otro encontrando una gran oferta en la pagina de paris, las prestaciones son:
  • Procesador Intel Core 2 Duo T7250 (2.0GHz)
  • Mobile Intel GM965 Express Chipset
  • Intel PRO wireless 4965AGN network connection
  • Pantalla TFT de 14.1" (1280x800) con Tecnología Sony XBRITE
  • Video Mobile Intel GMA X3100
  • RAM 2GB
  • Disco Duro 160GB SATA
  • Cámara y micrófono integrados
  • Compatible con tarjetas Memory Stick, SD y Memory Stick Pro
  • Otras Interfaces: i.LINK (IEEE 1394), USB 2.0 (3), salida VGA, audí fonos (estéreo), mic-in, DC-in, AV out, PCI-EXPRESS, ExpressCard, Bluetooth

Gane en algunas prestaciones y perdi en otras, Estado Final: Satisfecho :)


29 marzo 2008

10 años de ...

Hace 10 años un chileno fue el mejor del mundo, un chileno que se mantuvo en el tope por 4 semanas arrebatando el primer lugar a un Peter Sampras que llevaba un reinado de 102 semanas, en un partido magistral ante Andre Agassi gana el “súper 9”, pocos pueden decir que fueron el mejor del planeta y pese a lo inmaduro y rebelde que demostró ser en aquellos tiempos, no se puede negar que fue y por que no decirlo es aún un ídolo. Su avance fue insospechado, tratandose de un pequeño tenista, que no tenia gran fuerza pero si una excelente zurda.
Creo que es difícil que algún otro deportista (chileno) se pueda jactar de ser el mejor del mundo (al corto plazo), menos en el deporte blanco ya que los exponentes actuales dejan bastante que desear, con "garra" se puede ganar un par de partidos pero con talento se ganan los torneos.


24 marzo 2008

Double Buffering j2me

La técnica de pantalla en segundo plano consiste en lo siguiente: Muchos dispositivos que no poseen una gran capacidad computacional provocan un parpadeo a la hora de actualizar los gráficos en pantalla. En estos casos, lo ideal sería hacer todas las actualizaciones gráficas en memoria y posteriormente volcar el contenido de memoria en pantalla. Esta técnica es la que se conoce como double buffering. Algunos de estos dispositivos implementan esta técnica sin que tengamos que escribir ni una sola línea de código. Para saber si el MID donde ejecutamos nuestra aplicación aplica esta técnica, existe un método de la clase Canvas que nos devuelve true o false en caso de que aplique esta técnica o no: boolean isDoubleBuffered().

En caso de que el método nos devuelva true, no tenemos que hacer absolutamente nada especial ya que la implementación del MID se encarga de hacer todas las actualizaciones gráficas en memoria para posteriormente, volcarlo en pantalla. En el caso de que el método retorne false, nos indicaría que el dispositivo no es capaz de implementar esta técnica. En este caso es posible implementarla por nosotros mismos. Para ello, lo que haremos será crear una imagen mutable del tamaño de la pantalla del MID y efectuar todas las operaciones gráficas en el objeto Image para, posteriormente volcar el contenido de esta imagen por pantalla.

1.- Crear la imagen mutable del tamaño de la pantalla.
Image displaysecundario;
if (! isDoubleBuffered()){
displaysecundario= Image.createImage(getWidth(),getHeight());
}

2.- Realizar todas las actualizaciones en el objeto Image dentro del método paint(Graphics).
protected void paint(Graphics g){
Graphics displayprimario = g;
g = displaysecundario.getGraphics();

// Realizamos todas las operaciones para actualizar la pantalla en g.
...
//Realizamos el volcado en pantalla
displayprimario.drawImage(displaysecundario,0,0,Graphics.LEFT | Graphics.TOP);
}

Java un lenguaje popular


Mas estadisticas :) ... mensualmente se testea la popularidad de los lenguajes de programacion, y java encabeza la lista con un 20.6%, por su parte Ruby manteniendose estoicamente en el top 10. Por el lado del Sw propietario, Visual incrementa en 2 posiciones con respecto a igual mes del año anterior (que lastima XD)

PD: estoy un poco aburrido en la pega :)

Predominio de Apache en Web-Server

Apache domina ampliamente la web, en lo que concierne a servidores, en el sitio pingdom se muestra un interesante top 100, el que arroja los siguientes resultados.

02 marzo 2008

Scrolling Horizontal

Para crear un Scrolling de izquierda a derecha a partir de un mapa representado en un matriz.
1.- Imagenes
Tile 1

Tile 2

Tile 3

Tile 4

2.- Codigo
Crear un hilo en el cual colocaremos lo siguiente
2.1- Declaraciones
private int indice_in, indice, xTiles, yTiles, sleep;
private Image[] tile = new Image[5];
int map[][] = {
{1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 2, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1},
{1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}};

2.2.- Metodo run
Metodo que DEBE implementarse en un hilo

public void run() {
iniciar();
while (true) {
indice_in += 4;
if (indice_in >= 16) {
indice_in = 0;
indice--;
}
if (indice <>
indice = map[0].length - 1;
indice_in = 0;
}
repaint();
try {
Thread.sleep(sleep);
} catch (InterruptedException e) {
System.out.println(e.toString());
}
}
}

2.3.- Metodo paint
Metodo que pinta las imagenes en pantalla
public void paint(Graphics g) {
int x = 0, y = 0, t = 0;
int i, j;
g.setColor(255, 255, 255);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(200, 200, 0);
for (i = 0; i < xTiles; i++) {
int a = (indice + i) % map[0].length;
for (j = 0; j < yTiles; j++) {
t = map[j][a];
y = j * 16;
x = (i - 1) * 16 + indice_in;
g.drawImage(tile[t], x, y, Graphics.LEFT | Graphics.TOP);
}
}
}

3.- Video-Demo
La implementacion se realizo para un dispositivo movil, y resulto algo asi.








20 febrero 2008

Creación de Nube de Etiquetas

Al ingresar a tu blog como administrador, agregar un widget de etiquetas, y luego
vas a la vista del codigo HTML

Debemos buscar en el codigo ]]><_/b:skin>
(sin el guión bajo)
e insetar el siguiente codigo ANTES de ]]><_/b:skin>
(sin el guión bajo)

Ver Codigo

luego insertar el siguiente script ENTRE
]]><_/b:skin> y <_/head>
(sin el guión bajo)

<script type='text/javascript'>
// Label Cloud User Variables
var cloudMin = 1;
var maxFontSize = 20;
var maxColor = [0,0,255];
var minFontSize = 10;
var minColor = [0,0,0];
var lcShowCount = false;
script>

Ahora buscaremos
<_b:widget id="'Label1'" locked="'false'" title="'Labels'" type="'Label'/">

(sin el guión bajo)

y lo reemplazaremos por el siguiente codigo.

Ver codigo


El script maneja lo que tiene relación con el formato
de la nube de tags, como color, tamaño, si mostrar la
etiqueta junto a el contador, es cosa de meter mano y listo :)

Suerte.

El articulo fuente es: phydeaux3

18 febrero 2008

Creación de juego 2D en Java

En el primer semestre del año pasado inscribí como electivo el ramo de Computación Grafica, parecia un buen ramo, en donde se premiaría la práctica, no la memorización de conceptos, y en efecto, fue así. Para la aprovación de la asignatura tendriamos que realizar 3 proyectos, el segundo de ellos fue un juego 2D, para este desarrollo, se nos enseñaron bastantes tecnicas para la optimización del "pintado de la pantalla", y el uso eficiente de los recursos mediante buffer's.
El proyecto se realizaba en grupos de 2 o 3 personas, por suerte para mi, con mi grupo, o sea mi polola, encontramos los conocimientos tras buscar información en "san google" :) y cual sería la sorpresa al encontrar los codigos y apuntes presentados en clases (sin referencia a algún otro autor) en un libro llamado "Developing Games in Java" (David Brackeen) en donde estaban los mismos ejemplos presentados en clases (que mala costumbre el no hacer referencia al autor).
El libro cuenta con 18 capitulos en donde se tocan temas como:

- Creación de Hilos (Threads)
- Animacion 2D
- Interactividad e Interfaz de Usuario
- Efectos de Sonido
- Creacion de una plataforma de juego 2D
- Multi-player
- Deteccion de Colisiones
- Persistencia
- Tecnicas de optimización
- etc

Este libro fue de gran utilidad para poder crear nuestro proyecto cuyas caracteristicas son:
- Rapido
- Interactivo
- Efectos de sonido (sincronizados al movimiento)
- Guardar las partidas con su respectivo nick y screenshot del escenario
- 3 Niveles, cada nivel con 2 escenas
- Detección de colisiones
- Todo lo implicito que tiene la creación de un Juego (que es mas de lo que uno piensa ...jaja)

Lo que faltó...
- Un diseñador :) (plop)
- Implementar la opción de Multiplayer










En definitiva, el libro anteriormente mensionado es una guía excelente para adquirir conocimientos de la nutrida api de java. Con esfuerzo y perserverancia se pueden lograr cosas bastante buenas, el contra es que hay que codificar bastante.

Los recursos están disponibles en: Developing Games in Java Autor David Brackeen

04 febrero 2008

¿Que es un Midlet?


Un Midlet es una aplicación java utilizado en dispositivos móviles, funciona bajo la maquina virtual de j2me (java Micro Edition), por lo general se utiliza para la creación de juegos, su estructura es parecida a la de un applet (j2se).

El trabajo con esta tecnología (j2me) se facilita bastante con la utilización de entornos como Netbeans + Pack Mobility, en el cual se pueden generar VisualMidlet, donde, por medio de una GUI, se diseña el flujo de las ventanas y así se disminuye el tiempo y codificación en duro de elementos repetitivos.

02 febrero 2008

Noticias


Sun sigue por la apuesta del software libre y compra por solo 1.000 millones de dólares el motor de de base de datos MySql, ahora solo queda esperar la proxima versión de este motor para ver si se nota la mano de Sun.

28 enero 2008

logic:iterator & bean:write

Ejemplo de como utilizar el logic:iterator & bean:write de Struts.

pagina.jsp
(<)logic:iterate id="iterando" name="lista" scope="session" type="mypackage1.Mensaje">
(<)bean:write name="iterando" property="texto"/>
(<)/logic:iterate>

Ya que el blog no deja incrustar tag's hay que cambiar el (<) por <
____________________________

IterarAction.java
...
HttpSession session;
session = request.getSession();

Vector v=new Vector();
Mensaje a=null;
for(int i=0;i<10;i++){
a=new Mensaje();
a.setTexto("Hola "+i);
v.addElement(a);
}

session.setAttribute("lista",v);
...
____________________________
Mensaje.java

public class Mensaje {
private String texto;
public Mensaje() {
}

public String getTexto() {
return texto;
}

public void setTexto(String texto) {
this.texto = texto;
}
}
____________________________

Detalle del iterate:
id = identificador
name = nombre que desde el action debe ser seteado para llenarlo (session.setAttribute("lista",v))
type = tipo de objeto que contiene la lista o vector a iterar

Detalle del bean:write
name = nombre del iterador correspondiente
property = nombre del atributo del objeto en este caso texto del objeto mensaje (private String texto;)

El resultado que muestra el navegador es:

Hola 0 Hola 1 Hola 2 Hola 3 Hola 4 Hola 5 Hola 6 Hola 7 Hola 8 Hola 9

Nota:
Así se pude lograr iterar lo que sea, tablas, capas, fotos, objetos de cualquier tipo, selectores, combobox, etc.

11 enero 2008

Interrogantes


Falta poco para la defensa, no me preocupa tanto, ya que todo el mundo esta contento con el trabajo realizado, pero ¿que haré después? ... eso me quita el sueño ahora, tener la opción de llegar a santiago con pega "asegurada" (en teoría) crea una falsa confianza en el futuro laboral, sin embargo quiero realizar el proyecto que ahora desarrollamos (de forma underground) aunque sea a cambio de nada (mientras se encuentra el financiamiento). Hay varios factores por evaluar, familia, corazón, dinero, proyecciones laborales, opciones de incrementar el conocimiento. Para variar el entorno no ayuda mucho para tomar la decisión, ni las vacaciones están resultando como se PLANEO hace ya BASTANTE tiempo.

Por ahora el "plan" es defender y viajar, desconectarme de todo (perdón casi todo, el proyecto sigue donde sea) para en marzo retomar los tramites que queden pendientes...


10 enero 2008

Por Fin !!!

Hoy entregamos el Software que desarrollamos para el hospital (de chillán), por fin terminamos solo falta la defensa (fecha por confirmar), se les hizo entrega de:

1.- Cd con la Aplicación
2.- Manual de instalación
3.- Manual de Usuario

4.- Video Tutoriales

El cliente se mostró conforme y esperan comenzar a utilizarlos el prox. lunes, los que no estaban tan contentos eran los informaticos ya que el desarrollo fue hecho en una tecnologia que ellos no manejas (que novedad). En lo personal quedé conforme con el desarrollo, se cubrieron los requerimientos solicitados y se dió una buena solución al sistema actual. Es de esperar que mi celular no suene en las proximas semanas :). Como dijo el profesor informate "Un buen proyecto de titulo es el que logra satisfacer necesidades de una empresa y ademas adquirir conocimiento a sus desarrolladores". O sea puedo decir que nuestro proyecto tuvo de ambas cosas, a esperar la fecha por ahora.... (Continuará)

02 enero 2008

Visa y Pago USB

Tiempos de comercio electrónico, la forma de pago tiene vital importancia, por temas de seguridad muchas personas aun no se atreven a ingresar sus datos a paginas para compras online, pero que dirían si con solo colar un dispositivo usb en el puerto de tu computador la información necesaria seria enviada para realizar compras electrónicas, sin ingresar codigos, suena bastante bien, habrá que esperar los resultados de las pruebas realizadas en Corea por Visa y su nuevo sistema de pago USB.

Con este dispositivo de pago USB, las empresas (de Corea) están comprando lectores para que sus clientes dejen las tarjetas y cambien al nuevo sistema.

No hay mucho mas detalles de esto, solo esto por ahora.

01 enero 2008

Errores con Struts

Al lanzar errores con Struts utilizando la etiqueta html:errors es necesario editar 3 archivos

LoginAction.java

...
ActionErrors errorValidacion = new ActionErrors();
errorValidacion.add("errorLogin", new ActionError("errors.user"));
request.setAttribute("errorLogin", errorValidacion);

...


login.jsp
...
<_html:errors property="errorLogin"> (quitando los guiones bajo ( _ ) )
...

ApplicationResourses.properties
...
errors.user=Usuario desconocido
...


al intentar ingresar con un usuario ilegal el resultado es el siguiente ...