martes, 10 de enero de 2017

Modificar un archivo dentro de un .jar

Lo primero que debemos hacer es obtener el archivo que queremos modificar del .jar para ello si es un archivo plano podemos simplemente descomprimir el .jar usando 7zip

para este caso tenemos un archivo llamado prueba.jar que contiene lo siguiente

org/prueba/resources/propiedades.properties y este archivo tiene el siguiente contenido


extraemos el .jar para obtenemos y modificar el archivo propiedades.properties

modificamos el archivo con el editor de nuestra preferencia y guardamos los cambios


Creamos un directorio similar al directorio de paquetes que contiene nuestro archivo al mismo nivel del archivo jar y colocamos dentro el archivo modificado en nuestro caso org\prueba\resources\propiedades.properties


Luego ejecutamos el siguiente comando


jar es un utilitario que viene incluido dentro del jdk de java para poder ejecutar este comando debemos instalar el jdk y configurar las variables de entorno.

para verificar el cambio podemos extraer nuevamente el jar y ver el archivo propiedades.properties.

Si lo que queremos modificar una clase podemos obtener el contenido de la clase usando algún decompilador como el siguiente http://jd.benow.ca/ luego de ello creamos un proyecto, creamos el archivo .java, copiamos el contenido de la clase que queremos modificar y hacemos los cambios que necesitemos, agregamos el .jar como librería del nuevo proyecto para que no nos aparezcan errores.

finalmente generamos el nuevo jar con la modificación de la clase ya echa luego descomprimimos el nuevo jar obtenemos la nueva clase y procedemos con la ejecución del comando como se explico anteriormente.

domingo, 8 de enero de 2017

obtener la edad (años, meses y días) a partir de la fecha de nacimiento con javascript

Función para calcular la edad en años, meses y días


function calcularEdad(fecha) {
        // Si la fecha es correcta, calculamos la edad

        if (typeof fecha != "string" && fecha && esNumero(fecha.getTime())) {
            fecha = formatDate(fecha, "yyyy-MM-dd");
        }

        var values = fecha.split("-");
        var dia = values[2];
        var mes = values[1];
        var ano = values[0];

        // cogemos los valores actuales
        var fecha_hoy = new Date();
        var ahora_ano = fecha_hoy.getYear();
        var ahora_mes = fecha_hoy.getMonth() + 1;
        var ahora_dia = fecha_hoy.getDate();

        // realizamos el calculo
        var edad = (ahora_ano + 1900) - ano;
        if (ahora_mes < mes) {
            edad--;
        }
        if ((mes == ahora_mes) && (ahora_dia < dia)) {
            edad--;
        }
        if (edad > 1900) {
            edad -= 1900;
        }

        // calculamos los meses
        var meses = 0;

        if (ahora_mes > mes && dia > ahora_dia)
            meses = ahora_mes - mes - 1;
        else if (ahora_mes > mes)
            meses = ahora_mes - mes
        if (ahora_mes < mes && dia < ahora_dia)
            meses = 12 - (mes - ahora_mes);
        else if (ahora_mes < mes)
            meses = 12 - (mes - ahora_mes + 1);
        if (ahora_mes == mes && dia > ahora_dia)
            meses = 11;

        // calculamos los dias
        var dias = 0;
        if (ahora_dia > dia)
            dias = ahora_dia - dia;
        if (ahora_dia < dia) {
            ultimoDiaMes = new Date(ahora_ano, ahora_mes - 1, 0);
            dias = ultimoDiaMes.getDate() - (dia - ahora_dia);
        }

        return edad + " años, " + meses + " meses y " + dias + " días";
    }
Función para verificar si una cadena es un número

function esNumero(strNumber) {
    if (strNumber == null) return false;
    if (strNumber == undefined) return false;
    if (typeof strNumber === "number" && !isNaN(strNumber)) return true;
    if (strNumber == "") return false;
    if (strNumber === "") return false;
    var psInt, psFloat;
    psInt = parseInt(strNumber);
    psFloat = parseFloat(strNumber);
    return !isNaN(strNumber) && !isNaN(psFloat);
}

viernes, 6 de enero de 2017

Angular directivas para validar input (enteros y decimales)

Decimales

directive('decimal', function() {
                return {
                    require: 'ngModel',
                    restrict: 'A',
                    link: function(scope, element, attr, ctrl) {
                        function inputValue(val) {
                            if (val) {
                                var digits = val.replace(/[^0-9.]/g, '');

                                if (digits.split('.').length > 2) {
                                    digits = digits.substring(0, digits.length - 1);
                                }

                                if (digits !== val) {
                                    ctrl.$setViewValue(digits);
                                    ctrl.$render();
                                }
                                return parseFloat(digits);
                            }
                            return "";
                        }
                        ctrl.$parsers.push(inputValue);
                    }
                };
            });

Enteros



directive('entero', function() {
            return {
                require: 'ngModel',
                restrict: 'A',
                link: function(scope, element, attr, ctrl) {
                    function inputValue(val) {
                        if (val) {
                            var value = val + ''; //convert to string
                            var digits = value.replace(/[^0-9]/g, '');

                            if (digits !== value) {
                                ctrl.$setViewValue(digits);
                                ctrl.$render();
                            }
                            return parseInt(digits);
                        }
                        return "";
                    }
                    ctrl.$parsers.push(inputValue);
                }
            };
        });