sábado, 20 de julio de 2013

¿Qué intentaba arreglar cada lenguaje de programación?

Tomado de mundogeek.net

En su artículo What Languages Fix, Paul Graham, autor de Hackers & Painters y fundador de Y Combinator examinaba hace unos años algunos de los lenguajes de programación más conocidos desde una óptica interesante: los problemas que sus creadores intentaban solucionar al crearlos.

Hoy me he vuelto a encontrar con este texto y he dedicado unos minutos a traducirlo y a crear una representación gráfica en forma de línea de tiempo que podéis ver a continuación.


martes, 16 de julio de 2013

Modelo de cajas en CSS

Traducción de boxmodel:
Todos los elementos HTML son considerados como cajas. En CSS, el término "modelo de caja" o "box model" es usando al hablar del diseño y bosquejo.
El model de caja CSS es esencialmente una caja que se muestra alrededor de elementos HTML, el cual consiste de: márgenes, bordes, relleno y el contenido,
El modelo de caja nos permite colocar un borde alrededor de los elementos y espacio en relación a otros elementos.
El modelo se puede ver como la siguiente imagen:


Donde:
Margen (Margin): Es el espacio alrededor del borde. El margen no tiene color de fondo, es completamente trasnparente.
Borde (Border): Es el espacio alrededor del relleno y del contenido. El borde es afectado por el fondo de la caja.
Relleno(Padding): Es el espacio alrededor del contenido. El relleno es afectado por el color de fondo de la caja.
Contenido(Content): Es el contenido de la caja, donde se muestran las imágenes y el texto.

lunes, 15 de julio de 2013

Menú circular

Buscando ideas para crear un menú para la página www.llacuadetetique.com me topé con ésta bonita idea, la cual es crear un menú circular:


Donde el código para ponerlo en nuestra web la podemos encontrar en: codigo


miércoles, 10 de julio de 2013

Iglesia

Borrado de triggers de una base de datos mysql

En ocasiones cuando creamos triggers para llevar a cabo tareas inmediatas desde la base de datos y creamos triggers, sucede que después de un tiempo (1 semana) se nos olvida el nombre de los triggers creados. 

Éste problema conlleva a que si necesitamos subirlos de nuevo o simplemente borrarlos no podemos hacerlo hasta recordar el nombre (si es que nos acordamos). Una forma rápida de ver que triggers tenemos y de obtener la consulta para borrarlos es la siguiente:



select concat('drop trigger ', trigger_name, ';') from information_schema.triggers where trigger_schema = 'your_database' 


donde your_database es sustituido por el nombre de la base de datos donde se encuentran los triggers. Obtenido de http://stackoverflow.com

Como resultado nos dara los sqls necesarios para borrar los triggers que tenemos o en su caso para ver sus nombres.

Podemos ejecutar éste sql desde consola de Mysql o desde el PhpMyAdmin.

lunes, 8 de julio de 2013

Crear código SQL en Java a partir de una consulta

En una ocasión tuve la necesidad de respaldar ciertos datos de una base de datos MySql, los usuarios del programa tenian que generar a partir de una consulta los datos a exportar. De ésta forma tuve que buscar la manera de crear el código de inserción a la base de datos a partir de un conjunto de datos obtenidos a partir de una consulta a la BD.

El caso es el siguiente: Se tiene una consulta X, se requiere guardar a un archivo la exportación de la consulta y conocemos el nombre de la tabla de la cual se extrajo la información.
El primer procedimiento era usar las mismas herramientas que proporciona MySQL para llevar a cabo la exportación, solo que no todas las máquinas que usaban el programa se les podia instalar los ejecutables necesarios para llevar éste método; así que se decidió que se hiciera de forma plana (SQL) en archivos de textos importables a la Base de Datos final.

El método que se creo fue el siguiente:

    /**
     * Método que crea cadenas insert para cada datos leido de una consulta
     * @param entrada Consulta a crear los inserts
     * @param archivo Ruta del archivo a escribir
     * @param tabla Nombre de la tabla donde se insertaran los datos
     * @return Si se pudo o no realizar la conversión
     */
    public boolean creaInsert(ResultSet entrada, String archivo, String tabla) {
        try {
            ResultSet salidaRS = entrada;
            ResultSetMetaData rsmd = salidaRS.getMetaData();
            String consulta = "";
            consulta = "insert into " + tabla + " (";
            for (int k = 1; k < rsmd.getColumnCount(); k++) {
                consulta = consulta + rsmd.getColumnName(k + 1) + ",";
            }
            consulta = consulta.substring(0, consulta.length() - 1) + ") VALUES(";
            for (int k = 1; k < rsmd.getColumnCount(); k++) {
                if (rsmd.getColumnTypeName(k + 1).contains("INTEGER")) {
                    consulta = consulta + "" + salidaRS.getString(k + 1) + ",";
                } else if (salidaRS.getString(k + 1) == null || salidaRS.getString(k + 1).contains("null") || salidaRS.getString(k + 1).contains("----")) {
                    consulta = consulta + "null,";
                } else {
                    consulta = consulta + "'" + salidaRS.getString(k + 1) + "',";
                }
            }
            consulta = consulta.substring(0, consulta.length() - 1) + ");";
            File f;
            f = new File(tabla + ".txt");
            if (!f.exists()) {
                f.createNewFile();
            }
            escribeArchivo(tabla, consulta);
            return true;
        } catch (Exception a) {
            a.printStackTrace();
        }
        return false;
    }

De ésta forma se crea un archivo que contiene los inserts correspondientes a la consulta pasada como parámetro.

sábado, 6 de julio de 2013

Google recordandote

Que buen detalle de google, la verdad no sabía que hacía este tipo de cosas. Un gran punto a su favor :D

viernes, 5 de julio de 2013

Edad en Dias Meses Años usando java y mysql

En ocasiones es necesario saber la edad de una persona en cierta fecha, para esto existen diversas alternativas dependiendo de las herramientas con las que contamos.
En ésta ocasión les muestro la forma de hacerlo usando Java y una conexión a una base de datos MySql.
Para que el método descrito aqui funcione es necesario que se cuente con la conexión MySql ya creada y conectada y las fechas inicial y final. La fecha inicial puede ser la fecha de nacimiento y la final la fecha actual.
Para que el método sea lo mas amplio posible se pasa como parámetro ambas fechas.

public ResultSet DMAdiferencia(String inicio, String fin) {
try {
ResultSet diferencia = this.derby.createStatement().executeQuery(""
+ "SELECT   {fn TIMESTAMPDIFF(SQL_TSI_YEAR,{ts '" + inicio + " 00:00:00' },{ts '" + fin + " 00:00:00'}) } AS ANIOS, "
+ " ( ( {fn TIMESTAMPDIFF(SQL_TSI_MONTH,{ts '" + inicio + " 00:00:00'},{ts '" + fin + " 00:00:00'})}) -  ( {fn TIMESTAMPDIFF(SQL_TSI_YEAR,{ts '" + inicio + " 00:00:00'},{ts '" + fin + " 00:00:00'}) } * 12)) AS MESES, "
+ " -( {fn TIMESTAMPDIFF(SQL_TSI_DAY,{ts '" + fin + " 00:00:00'},"
+ "         {fn TIMESTAMPADD ( SQL_TSI_MONTH,"
+ "              (({fn TIMESTAMPDIFF(SQL_TSI_MONTH,{ts '" + inicio + " 00:00:00'},{ts '" + fin + " 00:00:00'})}) - ( {fn TIMESTAMPDIFF(SQL_TSI_YEAR,{ts '" + inicio + " 00:00:00'},{ts '" + fin + " 00:00:00'})  } )* 12 ),"
+ "             {fn TIMESTAMPADD( SQL_TSI_YEAR,"
+ "                 ({fn TIMESTAMPDIFF(SQL_TSI_YEAR,{ts '" + inicio + " 00:00:00'},{ts '" + fin + " 00:00:00'})}), {ts '" + inicio + " 00:00:00'} "
+ "             )}"
+ "         )}"
+ "     )"
+ "}) "
+ "AS DIAS");
return diferencia;

} catch (Exception a) {
a.printStackTrace();
}
return null;
}


Como resultado de éste método se retorna un tipo de dato ResultSet que contiene tres columnas: DIAS, MESES, ANIOS en caso de que no pasara error alguno. El uso del método puede ser mas o menos así:

ResultSet salida= DMAdiferencia("2013-01-01","2013-12-12");

int dias= salida.getInt("DIAS");

int meses=salida.getInt("MESES");

int anios= salida.getInt("ANIOS");



Ojo, la fecha debe estar en formato YYYY-MM-DD.

Espero que les sirva para sus proyectos

lunes, 1 de julio de 2013

Cálculo de CRIP (Clave de Registro e Identidad Personal)

Código para generar la CRIP, usada normalmente en las actas de nacimiento y como parte de la CURP
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package utils;

/**
 *
 * @author cabachu
 */
import java.io.*;
import java.util.*;
// calcula el digito verificador de la CRIP para siglo pasado y el siglo actual 
// necesita tomar los valores de entidad, municipio, oficialia, acta y año 
//regresa un string que contiene la CRIP 
public class CalculaCrip {

    public String obtener_crip(
            String strEntidad,
            String strMunicipio,
            String strOficialia,
            String strAnio,
            String strActa) {
        String strdatos = "";
        String strletras = "JABCDEFGHIJ ";  // constantes de letras 
        String strnumeros = "012345678900";// constantes de numeros
        int ik[] = {3, 2, 7, 6, 5, 4, 3, 2, 7, 6, 5, 4, 3, 2}; // constante para calcular la crip 
        int[] imul = new int[16];
        int[] inum = new int[16];
        int isuma = 0;
        int ix = 0;
        int ia = 0;
        int idigito = 0;
        if (strEntidad.length() == 1) {
            strEntidad = "0" + strEntidad;
        } // se agrega un cero si vien 1 solo digito 
        if (strMunicipio.length() == 1) {
            strMunicipio = "00" + strMunicipio;
        }// se agregan ceros hasta copletar 3 digitos 
        if (strMunicipio.length() == 2) {
            strMunicipio = "0" + strMunicipio;
        }
        if (strOficialia.length() == 1) {
            strOficialia = "0" + strOficialia;
        }// se agregan ceros hasta copletar 2 digitos 
        if (strActa.length() == 1) {
            strActa = "0000" + strActa;
        }// se agregan ceros hasta copletar 5 digitos 
        if (strActa.length() == 2) {
            strActa = "000" + strActa;
        }
        if (strActa.length() == 3) {
            strActa = "00" + strActa;
        }
        if (strActa.length() == 4) {
            strActa = "0" + strActa;
        }
strdatos = strEntidad + strMunicipio + strOficialia + strAnio.substring(2, 4) + strActa; // se contatena la raiz para calcular el digito
        System.out.println(strdatos);
// a cada numero de la raiz se le multiplica por un nuemro de la constante y se suman 
        for (ia = 0; ia < 14; ia++) {
            inum[ia] = Integer.valueOf(strdatos.substring(ia, ia + 1)).intValue();
            imul[ia] = inum[ia] * ik[ia];
            isuma = isuma + imul[ia];
        }
// se obtiene el digito verificador 
        ix = isuma % 11;
        System.out.println("suma  ");
        System.out.println(isuma);
        System.out.println("digito antes de resta ");
        System.out.println(ix);
        if (ix <= 0) {
            idigito = 0;
        } else {
            idigito = 11 - ix;
        }
// se evalua el año y se coloca el digito verificador numero o letra 
        System.out.println("valor de comparacion");
        System.out.println(strAnio.compareTo("1999"));
        if (strAnio.compareTo("1999") > 0) {
            if (idigito == 0) {
                strdatos = strdatos + "J";
            } else {
                System.out.println(idigito);
                strdatos = strdatos + strletras.substring(idigito, idigito + 1);
            }
        } else {
            System.out.println(idigito);
            strdatos = strdatos + strnumeros.substring(idigito, idigito + 1);
        }
        System.out.println(strdatos);
        return strdatos;

    }
}