viernes, febrero 22, 2008

The last lunar eclipse in this decade

Versión en Español

Last Wednesday February 20, 2008, a lot of Nicaraguans got an amazing "sky show", when Sun, Moon and the planet where We walk on every day, the Earth got together in a perfect dance.

Early in the afternoon in Granda, Nicaragua (my point of view), I didn't see the Moon by cause of a cloudy sky, about 7:30 PM it started to rain, so I decided to install in my computer this program: Stellarium, because I didn't want to lose the eclipse by cause of the bad weather.

Stellarium is a free (libre) software, you can download it from its official home page: http://www.stellarium.org/, it works on Windows, Linux and Mac OS X. If you have played any 3D game, you will learn easy how to use it.

If you didn't see the eclipse, don't worry, at same time that Stellarium can send you around the world, it can work like a "time machine", that means you can "go back in time" and see the eclipse step by step, in virtual form.

Fortunately in Granada, near to 8:20 PM, the sky cleared and the rain stopped, and I could see in the real world the last lunar eclipse in this decade!.

By the way, I realized through this great software, Stellarium, that the shining star near to the Moon was not a star, but it really was Saturn planet, I learned it thanks to Stellarium, you can see about it on next image.















Please excuse my english, english is not my first language, but I'm learning.
Linux Tour Nicaragua 2008 Begins

Versión en Español

Linux Tour is an initiative from the community of GNU/Linux users in Nicaragua, to promote the usage of free (libre) software and open source in our country.

This next 22 friday at 3:00 PM, will start the Linux Tour 2008 in the main auditorium of the Universidad de Ciencias Comerciales (UCC).

If you want to know more about it, you can visit the official site: http://www.linuxtour.org




Please excuse my english, english is not my first language.
Inicia el Linux Tour 2008 - Nicaragua

English Versión

El Linux Tour es una iniciativa de la comunidad de usuarios GNU/Linux de Nicaragua destinada a promover el uso de alternativas libres y de código abierto en nuestro país.

El próximo viernes 22 de febrero a las 3:00 PM, dará inicio el Linux Tour 2008 en el auditorio mayor de la Universidad de Ciencias Comerciales (UCC).

Para mayor información visitar el sitio oficial: http://www.linuxtour.org

jueves, febrero 21, 2008

El último eclipse lunar de esta década

English Version

El día de ayer, Miércoles 20 de Febrero del año 2008, muchos Nicaragüenses disfrutamos el maravilloso espectáculo realizado en el teatro celestial, donde las "estrellas" nos fascinaron, en una perfecta danza ejecutada entre el Sol, la Luna, y el planeta que pisamos a diario: la Tierra. Según las noticias era el último eclipse lunar de esta década.

Al inicio, en Granada Nicaragua (mi punto de observación), un cielo medio nublado, no dejaba contemplar completamente la luna, luego como a eso de las 7:30 PM de forma repentina los cielos dejaron caer una lluvia que tardó aproximadamente 20 minutos, por lo cual se me ocurrió instalar este programa en mi computadora: Stellarium, para no perderme por el mal clima el eclipse que estaba pronto a iniciar.

Stellarium es sofwtare libre, pueden descargarlo desde su sitio oficial en: http://www.stellarium.org/, hay versiones para Windows, Linux, y Mac OS X. Si han jugado cualquier juego 3D, no se les va a hacer complicado empezar a utilizarlo.

Si se perdieron del eclipse, no se preocupen Stellarium no sólo puede llevarlos a ver el cielo desde distintos lugares del mundo, sino también permite viajar en el tiempo (fecha y hora), con lo cual podrían "volver al pasado" y apreciar, de forma virtual, el eclipse paso a paso.

En Granada, como a eso de las 8:20 PM, por suerte las nubes se fueron, la lluvia no siguió, y puede apreciar en vivo y a todo color (en el mundo real) del último eclipse lunar de esta década!.

Por cierto ayer me dí cuenta mediante este excelente programa Stellarium, que la "estrella" brillante que estaba un poco abajo de la luna no era una estrella, sino que era el planeta Saturno, está información también la pude obtener gracias a Stellarium, a como se aprecia en la imagen a continuación.

viernes, febrero 15, 2008

Run JavaScript code, step by step using Firebug

Versión en Español

Before I know about Firebug, to debug javascript code was very complicated for me, I had to add a lot of 'alert' sentences in each point that I wanted to check, but later I found Firebug.

Firebug show us each javascript error code, give us a brief description about each error and the best part is that let us run step by step the javscript code, at same time we can watch each variable value, create break points, and follow the secuence of code.

If you want to start using Firebug, you should download:

Firefox
Firebug

Fast How To:

1- Open Firebug



2- Activate "Script" tab, then select one file to debug, from "Inspect" list.



3- Put break points on the javascript source



4- Trigger off the event to start the javascript code execution, then you can use the watch window


Please excuse my english, english is not my first language.

jueves, febrero 14, 2008

Ejecutar código JavaScript paso a paso con Firebug

English Version

Antes de conocer Firebug, corregir un error en un código javascript me era complicado, tenía que agregar muchas sentencias 'alert' en distintos lugares del código, para descubrir donde estaba el error que buscaba, pero después encontré Firebug y todo cambio.

Firebug encuentra y enumera los errores de código javascript, brinda una descripción de cada error y lo mejor de todo es que permite ejecutemos paso a paso el código, inspeccionar los valores de las variables, crear 'break points', y seguir la secuencia del código javascript paso a paso.

Herramientas Necesarias:

Descargar Firefox
Descargar Firebug

Pasos Rápidos:

1- Abrir Firebug



2- Activar la ficha "Script" y seleccionar el archivo correspondiente en el selector "Inspect"



3- Ubicar los break points en el código javascript



4- Disparar el evento que ejecute el código y usar los controles de ejecución y el inspector de variables

miércoles, febrero 13, 2008

Validar números de cédulas de Nicaragua con Java

Validar números de cédulas de Nicaragua con Java

A continuación comparto un pequeño código Java para validar si una cadena de texto es un número de cédula válido en Nicaragua.

Siéntanse en la libertad de usarlo, modificarlo, copiarlo o compartirlo. Se ha liberado como L-GPL3 y software de dominio público.

Esta es la versión del 10 de agosto del 2013. Con el aporte de Filgrados Correos.

http://sites.google.com/site/denisjtorresg/cedula.zip

Ver versión para JavaScript.


package denisjtorresg.info;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.JOptionPane;

/**
 * Validador de Número de Cédula Nicaraguense
* Este programa es software libre: usted lo puede redistribuir y/o modificar * bajo los términos de la GPL version 3 y/o software de dominio público.
* * blog.denisjtorresg.info * * Con colaboración de: * - Filgrados Correos. *
* * @autor: denisjtorresg@gmail.com * @version: 10/08/2013 * * */ public class ValidarCedula { private final String LETRAS = "ABCDEFGHJKLMNPQRSTUVWXY"; private String cedula = null; /** * Para Pruebas * @param args */ public static void main(String[] args){ String tempo = null; boolean gui = false; ValidarCedula cedula = new ValidarCedula(); if(args.length==0){ cedula.setCedula(JOptionPane.showInputDialog( "Indique la cédula a validar" )); gui = true; } else cedula.setCedula(args[0]); tempo = "Cédula a Validar: " + cedula.getCedula() + "\n"; tempo+= "Prefijo a Validar: " + cedula.getPrefijoCedula()+ "\n"; tempo+= "Fecha a Validar: " + cedula.getFechaCedula()+ "\n"; tempo+= "Sufijo a Validar: " + cedula.getSufijoCedula()+ "\n"; tempo+= "Letra a Validar: " + cedula.getLetraCedula()+ "\n"; tempo+= "¿Es Cédula Válida?: " + (cedula.isCedulaValida()?"SI":"NO")+ "\n"; tempo+= "¿Es Prefijo Válido?: " + (cedula.isPrefijoValido()?"SI":"NO")+ "\n"; tempo+= "¿Es Fecha Válida?: " + (cedula.isFechaValida()?"SI":"NO")+ "\n"; tempo+= "¿Es Sufijo Válido?: " + (cedula.isSufijoValido()?"SI":"NO")+ "\n"; tempo+= "¿Es Letra Válida?: " + (cedula.isLetraValida()?"SI":"NO")+ "\n"; tempo+= "La letra esperada es: " + cedula.calcularLetra() + "\n"; if(gui) JOptionPane.showMessageDialog(null,tempo); else System.out.println(tempo); } /** * Retorna true si la cédula es válida * false en caso contrario * * @return */ public boolean isCedulaValida(){ if(!isPrefijoValido()) return false; if(!isFechaValida()) return false; if(!isSufijoValido()) return false; if(!isLetraValida()) return false; return true; } /** * Retorna true si el prefijo de la cédula es válida * false en caso contrario * * @return */ public boolean isPrefijoValido(){ String prefijo = this.getPrefijoCedula(); if(prefijo==null) return false; Pattern p = Pattern.compile("^[0-9]{3}$"); Matcher m = p.matcher(prefijo); if (!m.find()) return false; return true; } /** * Retorna true si la fecha de la cédula es válida * false en caso contrario * * @return */ public boolean isFechaValida(){ String fecha = this.getFechaCedula(); if(fecha == null) return false; Pattern p = Pattern.compile("^(0[1-9]|[12][0-9]|3[01])(0[1-9]|1[012])([0-9]{2})$"); Matcher m = p.matcher(fecha); if (!m.find()) return false; // verificar si la fecha existe en el calendario try { DateFormat df = new SimpleDateFormat("ddMMyy"); if(!fecha.equals(df.format(df.parse(fecha)))){ return false; } } catch (ParseException ex) { return false; } return true; } /** * Retorna true si el sufijo de la cédula es válida * false en caso contrario * * @return */ public boolean isSufijoValido(){ String sufijo = this.getSufijoCedula(); if(sufijo == null) return false; Pattern p = Pattern.compile("^[0-9]{4}[A-Y]$"); Matcher m = p.matcher(sufijo); if (!m.find()) return false; return true; } /** * Retorna true si la letra de la cédula es válida * false en caso contrario * * @return */ public boolean isLetraValida(){ String letraValida = null; String letra = this.getLetraCedula(); if(letra == null) return false; letraValida = String.valueOf(this.calcularLetra()); return letraValida.equals(letra); } /** * Retorna un entero que representa la posición en la cadena LETRAS * de la letra final de una cédula * * @return */ public int getPosicionLetra(){ int posicionLetra = 0; String cedulaSinLetra = this.getCedulaSinLetra(); long numeroSinLetra = 0; if(cedulaSinLetra == null) return -1; try{ numeroSinLetra = Long.parseLong(cedulaSinLetra); }catch(NumberFormatException e){ return -1; } posicionLetra = (int)(numeroSinLetra - Math.floor((double)numeroSinLetra/23.0) * 23); return posicionLetra; } /** * * Calcular la letra al final de la cédula nicaraguense. *
* Basado en el trabajo de: Arnoldo Suarez Bonilla - arsubo@yahoo.es *
* http://espanol.groups.yahoo.com/group/ptic-nic/message/873 * Mie, 6 de Feb, 2008 2:39 pm *
* Es correcto, los ultimos 4 numeros de la cédula son un consecutivo de las personas que nacen en la misma fecha y municipio. * La letra se calcula con el siguiente algoritmo (yo se los envío en SQL). *
*
     * declare  @cedula      varchar(20),
     *          @val         numeric(13, 0),
     *          @letra       char(1),
     *          @Letras      varchar(20)
     *          
     *          select @Letras = 'ABCDEFGHJKLMNPQRSTUVWXY'
     *          select @cedula = '0012510750012' --PARTE NUMERICA DE LA CEDULA SIN GUIONES
     *          --CALCULO DE LA LETRA DE LA CEDULA   
     *          select @val = convert(numeric(13, 0), @cedula) - floor(convert(numeric(13, 0), @cedula) / 23) * 23
     *          select @letra = SUBSTRING(@Letras, @val + 1, 1)
     *          select @letra
     * 
* @return Letra válida de cédula dada */ public char calcularLetra(){ int posicionLetra = getPosicionLetra(); if(posicionLetra <0 posicionletra="">= LETRAS.length()) return '?'; return LETRAS.charAt(posicionLetra); } /** * Fiajr el Número de Cédula * * @param cedula Número de Cédula con o sin guiones */ public void setCedula(String cedula) { cedula = cedula.trim().replaceAll("-",""); if(cedula == null || cedula.length() != 14) this.cedula = null; else this.cedula = cedula.trim().replaceAll("-","").toUpperCase(); } /** * Retorna el Número de Cédula * @return */ public String getCedula() { return cedula; } /** * Retorna el prefijo de la cédula * @return */ public String getPrefijoCedula(){ if(cedula!=null) return cedula.substring(0,3); else return null; } /** * Retorna la fecha en la cédula * @return */ public String getFechaCedula(){ if(cedula!=null) return cedula.substring(3,9); else return null; } /** * Retorna el sufijo en la cédula * @return */ public String getSufijoCedula(){ if(cedula!=null) return cedula.substring(9,14); else return null; } /** * Retorna la letra de la cédula * @return */ public String getLetraCedula(){ if(cedula!=null) return cedula.substring(13,14); else return null; } /** * Retorna la cédula sin la letra de validación * @return */ public String getCedulaSinLetra(){ if(cedula!=null) return cedula.substring(0,13); else return null; } }