viernes, noviembre 20, 2009

Form Validation Jquery

Hola

Acá le dejo un modificación que realice a un script de jquery para validar formulario.

Implementacion HTML

<script type="text/javascript" src="jquery/jquery-1.3.2.js"></script>
<script type="text/javascript" src="jquery/jquery.formvalidator.js"></script>

Form js
<script type="text/javascript">
$(function () {
$('#btUser').formValidator({
scope : '#user',
errorDiv : '#errorDiv'
});

});
</script>
Form HTML (Sample)

Usuarios

(*) Campos Obligatorios

Input (*)

<input id="input" name="input" class="input" value="" label="Input" required="true" type="text">

Number (*)

<input id="number" name="number" class="input" value="" req="numeric" minlength="2" maxlength="10" label="Number" required="true" type="text">

Double (*)

<input id="double" name="double" req="numeric" class="input" value="" label="Double" required="true" type="text">

Select (*)

<select id="select" name="select" class="input" label="Select" required="true">
<option value="0">...</option>
<option value="1">Nada</option>
</select>

Check

<input id="check" name="check" value="true" type="checkbox">

Radio

<input id="radio" name="radio" value="0" checked="checked" type="radio">Si
<input id="radio" name="radio" value="1" type="radio">No

Password (*)

<input id="password" name="password" req="same" class="input" value="" required="true" rel="password1" label="Password" type="password">

Re-Password (*)

<input id="password1" name="password1" req="same" class="input" value="" required="true" rel="password" label="Re-Password" type="password">

Calle

<input id="calle" name="calle" req="both" class="input" value="" required="true" rel="num" label="Calle" type="text">

Numero

<input id="num" name="num" class="input" value="" required="true" rel="num" label="Numero" type="text">

<input id="btUser" value="Insert" class="sendBtn" type="submit">

Código Javascript

/*
*
* Form Validation 2009
* @author Tolga Arican, Ivan A. Flores Correa
* @website www.utopicfarm.com, slacker-linux.blogspot.com
* @version 2.0.1
*
*/

(function($) {

$.fn.formValidator = function(options) {
$(this).click(function() {
var result = $.formValidator(options);

if (result && jQuery.isFunction(options.onSuccess)) {
options.onSuccess();
return false;
} else {
return result;
}
});
};

$.formValidator = function (options) {

// merge options with defaults
var merged_options = $.extend({}, $.formValidator.defaults, options);

// result boolean
var boolValid = true;

// result error message
var errorMsg = '<ul>';

// clean errors
$(merged_options.scope + ' .error-both, ' + merged_options.scope + ' .error-same, ' + merged_options.scope + ' .error-input').removeClass('error-both').removeClass('error-same').removeClass('error-input');

// Verificamos si se validan
$(merged_options.scope+' .input').each(function(){
thisValid = $.formValidator.validate($(this),merged_options);
boolValid = boolValid && thisValid.error;
if (!thisValid.error) errorMsg += thisValid.message;
});
errorMsg += '';

// submit form if there is and valid
if ((merged_options.scope != '') && boolValid) {
$(merged_options.errorDiv).fadeOut();
}

// if there is errorMsg print it if it is not valid
if (!boolValid && errorMsg != '') {
var tempErr = (merged_options.customErrMsg != '') ? merged_options.customErrMsg : errorMsg;
$(merged_options.errorDiv).hide().html(tempErr).fadeIn();
}

return boolValid;
};

$.formValidator.validate = function(obj,opts) {
var valAttr = obj.val();
var css = opts.errorClass;
var mail_filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
var numeric_filter = /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)|(^-?\d*$)/;
var tmpresult = true;
var result = true;
var errorTxt = '';
var label = obj.attr('label');
var required = obj.attr('required');
var req = obj.attr('req');
var name = obj.attr('name');
var type = obj.attr('type');

// Validamos
if (required == 'true') {
tmpresult = false;
if (valAttr != '') {
if (valAttr != '0') {
tmpresult = true;
}
}
if (!tmpresult) errorTxt +='<li>'+label+' '+opts.errorMsg.reqString+'</li>';
result = result && tmpresult;
}

// SAME FIELD VALIDATION
if (req == 'same') {

tmpresult = true;

group = obj.attr('rel');
tmpresult = true;
$(opts.scope+' .input[rel="'+group+'"]').each(function() {
if($(this).val() != valAttr || valAttr == '') {
tmpresult = false;
}
});
if (!tmpresult) {
$(opts.scope+' .input[rel="'+group+'"]').parent().parent().addClass('error-same');
errorTxt += '<li>'+opts.errorMsg.reqSame+'</li>';
} else {
$(opts.scope+' .input[rel="'+group+'"]').parent().parent().removeClass('error-same');
}

result = result && tmpresult;
}

// BOTH INPUT CHECKING
// if one field entered, the others should too.
if (req == 'both') {

tmpresult = true;

if (valAttr != '') {

group = obj.attr('rel');

$(opts.scope+' .input[rel="'+group+'"]').each(function() {
if($(this).val() == '') {
tmpresult = false;
}
});

if (!tmpresult) {
$(opts.scope+' .input[rel="'+group+'"]').parent().parent().addClass('error-both');
errorTxt += '<li>'+opts.errorMsg.reqBoth+'</li>';
} else {
$(opts.scope+' .input[rel="'+group+'"]').parent().parent().removeClass('error-both');
}
}

result = result && tmpresult;
}

// E-MAIL VALIDATION
if (req == 'email') {
tmpresult = mail_filter.test(valAttr);
if (!tmpresult) errorTxt += '<li>'+opts.errorMsg.reqMailNotValid+'</li>';
result = result && tmpresult;
}


// MINIMUM REQUIRED FIELD VALIDATION
var minlength = obj.attr('minlength');
if (obj.attr('minlength') != null) {
tmpresult = (valAttr.length >= minlength);
if (!tmpresult) errorTxt += '<li>'+label+' '+opts.errorMsg.reqMin.replace('%1', minlength)+'</li>';
result = result && tmpresult;
}
// NUMERIC FIELD VALIDATION
if (req == 'numeric') {
tmpresult = numeric_filter.test(valAttr);
if (!tmpresult) errorTxt += '<li>'+label+' '+opts.errorMsg.reqNum+'</li>';
result = result && tmpresult;
}

if (result) {
obj.removeClass(css);
} else {
obj.addClass(css);
}

return {
error: result,
message: errorTxt
};
};

setMsg = function() {

}

// CUSTOMIZE HERE or overwrite by sending option parameter
$.formValidator.defaults = {
onSuccess : null,
scope : '',
errorClass : 'error-input',
errorDiv : '',
errorMsg : {
reqString : 'es Requerido',
reqDate : 'Fecha no es valida',
reqNum : 'solo acepta Numeros',
reqMailNotValid : ' E-Mail no es valido',
reqMailEmpty : 'Please fill e-mail',
reqSame : 'Campos Re-confirmacion no son iguales',
reqBoth : 'Campos Relacionado(s) requerido',
reqMin : ' requiere %1 como minimo'
},
customErrMsg : ''
};
})(jQuery);

En que le interese le envío el ejemplo funcional

viernes, noviembre 06, 2009

restart grub - livecd

Hola Todos

Acá voy a dejar los pasos para recuperar el grub al instalar $win, en si los pasos son simples :

1.- Crear una carpeta para montar la partición (**)

$sudo mkdir /mnt/root


2.- Montar la Partición que contiene instalado la distro de Linux

$sudo mount -t [formato particion] [particion a momtar] /mnt/root


3.- Montamos el proc del sistema

$sudo mount -t proc none /mnt/root/proc

4.- Montamos los dispositivos

$sudo mount -o bind /dev /mnt/root/dev

5.- Hacemos nuestra partición raíz

$sudo chroot /mnt/root /bin/bash

Ahora ya estamos en nuestra distro, podemos correr el comando que queramos y se va ejecutar en la distro.

Ahora para recuperar el grub solo hacemos lo siguiente :

$sudo update-grub

Eso

(**) Opcional

Saludos

miércoles, octubre 07, 2009

split file with different name

Hola

Otra ayuda de memoria para separar archivos grandes en n lineas y dejarlos con un nombre claro :


#!/bin/sh

#Separamos el Archivo en tamaño de $1 lineas
split -l $1 -a 4 $2

# Movemos los archivos
ls x* | while read file;do echo "mv "$file" "$3"_"$file".$4";done >> comando.sh
# Ejecutamos la Salida
sh comando.sh
rm comando.sh

echo "ok"


Con esto se deja un archivo en n archivos de n lineas , solo se debe pasar 4 parametros de entrada a la shell :

$1 : cantidad lineas
$2 : nombre de archivo a dividir
$3 : nombre de como deben quedar los archivos
$4 : extencion de los archivos

Saludos

martes, agosto 25, 2009

Chronium + Ubuntu




Hola

Acá les dejo los pasos para instalar chromium en ubuntu (La version de Chrome) :

1.- Agregar las siguientes lineas en /etc/apt/source.list
deb http://ppa.launchpad.net/chromium-daily/ppa/ubuntu jaunty main
deb-src http://ppa.launchpad.net/chromium-daily/ppa/ubuntu jaunty main

2.- Agregar la key para el repositorio :

#sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 4E5E17B5

3.- Hacer un Update de los repositorios

#sudo apt-get update

4.- Instalar

#sudo apt-get install chromium-browser

Con estos pasos pueden probar la versión

Info : launchpad.net

Saludos

jueves, agosto 06, 2009

Google Calendar + Gnome

Hola

Otra ayuda de memoria, para lo que usamos googleCalendar de agenda y no la mano como agenda ... XD . Acá les dejo un tips de como Configurar este con el Calendario de gnome.

Los pasos son los siguientes :

1.- Obtener la Url Privada del Calendario, esto se hace en Configuración / Calendarios , selecciona el Calendario en Mis Calendarios, luego ir a "Dirección privada" y ahí presionar el icono que dice "ical", Este te devolverá una Url, copiala.

2.- Ejecutar el siguiente comando :

#/usr/lib/evolution-webcal/evolution-webcal [url copiada]

3.- Seleccionar el Tiempo de Refresh y el color de los Mensajes.

Con estos tres pasos ya estamos coordinados con nuestra agenda.

Eso

Saludos

viernes, julio 24, 2009

Redireccionar Puerto de Host Remoto

Hola

Nueva ayuda de memoria, Para redireccionar puertos de una maquina remota a otro de la Local usando ssh (Util cuando te dan una conexion VPN y las usas remotamente).

Comando :


~#ssh user@ip-remota -L ip-maquina-redirect:pto-maquinba-redirect:ip-remota:pto-remoto


Los malo que se abre una session ssh y al cerrar esta se pierde este redirect.

Yo me quedo con IPTABLES ...;-)

Saludos

lunes, julio 20, 2009

Cisco VPN Client Ubuntu

Hola

Acá dejare una pequeña ayuda de memoria , para conectarse a VPN cisco usando Linux. Los pasos para la conexión son los siguientes :

1.- Descargar el ciscovpn-client desde la siguiente url http://projects.tuxx-home.at/ciscovpn/clients/linux/, descargar la ultima versión disponible .

2.- Bajar el patch para el kernel desde la siguiente url http://projects.tuxx-home.at/ciscovpn/patches/, bajar la ultima versión.

3.- descomprimir el tar.gz bajado con el siguiente comando :

#tar xzf vpnclient-linux-x86_64-XXXX.tar.gz

4.- Entrar a la Carpeta descomprimida :

#cd vpnclient

5.- Ejecutar el patch sobre el source :

#patch < [ubicación descarga]/vpnclient-linux-XXX-final.diff

6.- Ejecutar instalador

#sudo ./vpn_install

7.- Contestar la preguntas que realiza la instalación

8.- ir a /etc/opt/cisco-vpnclient/Profiles

#cd /etc/opt/cisco-vpnclient/Profiles

9.- Copiar el Archivo "sample.pcf" con el nombre de la conexión que se desea :

#cp sample.pcf trabajo.pcf

10.- Editar el archivo generado

#vi trabajo.pcf

11.- Editar los siguientes parámetros del archivo pcf :

Description=
Host=[IP]
GroupName=[NOmbre del Grupo]
Username= [Usuario]
SaveUserPassword=1
UserPassword=[contraseña]
GroupPwd=[contraseña Grupo]

Con estos parámetros como mínimo funciona la conexión, los demás parámetros los dejo a gusto de cada uno.

12.- Subir el vpn client

#sudo /etc/init.d/vpnclient_init start

13.- Conectarse al Profile Creado :

#vpnclient connect trabajo

Si están todos los datos OK, con esto ya esta listo para usar la VPN cisco desde Linux

Suerte

martes, marzo 17, 2009

Ubuntu JauntryV


Hola Human@s

Bueno hoy les voy a comentar lo que ha sido mi nuevo distupgrade de ubuntu en mi pc de mi HOME. Debido a que las veces anteriores solo modificaba mi /etc/source.list , modificaba la versión y hacia un dist-upgrade, pero esto siempre me provocaba algún problema a la larga, esta vez lo hice de la forma decente osea los instale desde cero.

Ya que tengo mi partición del $HOME separada de la de / y el /boot, estas dos las formatie, obviamente sabiendo la nueva maravilla de formato que traía Linux no dude en formatearlas en ext4.

Mi primera impresión fue de asombro ya que reinicie me di vuelta mire mi pc y ya estaba el GDM esperando para que ingrese los datos... cri .. cri ... mmmmm, obviamente volví a reiniciar para tomar el tiempo de cuanto tomaba en llegar al GDM.

Desde que aparece la pantalla de la bios a la del gdm, esta carga 9 segundo ..... wuuuuuuuuaaaaaa .... obviamente con este puro punto me facino EXT4, ahora no hice ningún cambio en el arranque, solo instale la versión del kernel por defecto que trae el ubuntu , el / y /boot formateada con ext4, y esta maravilla es realidad. y no modifique nada en el kernel para que arranque el 5 segundo.

Mi segunda impresión fue los mensajes del gnomes, que por ahí había leído de los pro y los contra de esta nueva forma de despliegue de los mensajes, y como siempre no faltan los que se oponen a cualquier cambio que les modifique su forma de vida ... ;-). Yo los encontré la raja, y aparte que se ven bonitos... le da estilo al despliegue de mensaje... ;-).

Lo otro es el amarok nuevo, no me gusto para nada.. pero por ahí ya me recomendaron otro programa para ordenar "mi musica ilegal y sin pago" .. el programa es banshee, obviamente aun no lo he probado, pero cuando llegue motivado a prender el pc en mi casa lo instalare.

Revise igual el openoffice 3.0 ya que aproveche de modificar mi CV ... ;-), y lo encontré mas rápido.

Mas que eso no he probado pero en si anda bien, osea se puede hacer un dist-upgrade.

eso

Saludos

miércoles, marzo 04, 2009

Buen Reportaje sobre el Software Libre

Hola Human@s

Aca les dejo un buen reportaje sobre el opensource.



Saludos