El problema que se me presentaba era que todas las tecnologías que tenia para guardar y obtener variables de sesión en una pagina web eran con php, esto lo que hacia era hacer un pedido al servidor por php para que este obtuviera la variable en el cliente.
Entonces empecé a buscar un poco y encontré esta librería que no solo sirve para generar variables de sesión con javascript sino para mucho mas, pero lo que yo utilizo es solo este tema. La librería no es (para el tema de variables de sesión) gran cosa pero si es una muy buena idea.
La librería se llama SessVars.js, si buscan en Internet van a encontrar donde descargarla, y es totalmente gratis.
Primero que nada debemos de tener una inclusión del javascript en cada una de las paginas en las que vamos a utilizarlo, esto se hace de la siguiente forma
Luego cuando queremos guardar una variable de session hacemos lo siguiente
sessvars.usuario = val;
esto se lee de la siguiente forma, en la clase sessvars que va a ser digamos así, el contenedor de sesiones, se agrega la session usuario con el valor var. Si necesitamos luego definir por ejemplo una variable de sesión que sea nombre por ejemplo, ponemos sessvars.nombre = "pepe"
Y para recuperarla hacemos esto
usu = sessvars.usuario
esto se lee como que en la variable usu, nos queda el valor de la variable de sesión usuario.
Como ven es mucho mas fácil y sencillo que con php (por lo menos para mi) y realmente es muy muy rápido
Intentare mostrarles todas las cosas que me pasan día a día en mis pruebas, en mi trabajo, etc.
sábado, 17 de octubre de 2009
Variables de sesión con Javascript (sessvars.js)
sábado, 19 de septiembre de 2009
Genexus 9, Confirm en web
Estoy trabajando con gx 9 web y quiero hacer lo que en las versiones win es el conocido Confirm().
Un ejemplo de esto en win seria preguntarle si esa seguro si quiere realizar determinada acción, entonces el código seria algo así
Confirm("Estas seguro de borrar el archivo?',N)
if confirmed()
// eliminamos el archivo
endif
Bueno en web esto no anda entonces lo que se utiliza es un poco de los eventos html para esto.
Entonces seria algo así, tenemos un botón el cual al cliquearlo queremos que nos pregunte si realmente estamos seguros.
En el evento start ponemos algo asi
btn.JSEvent('onclick',"confirm('Realmente desea ...?')")
donde btn es el nombre del botón
luego en el evento del botón, solamente tenemos que poner el código para eliminar o hacer lo que deseamos.
Esto lo que produce es nos muestra una ventana Windows, en la cual nos pone el texto "Realmente ..." y nos pide que Aceptemos o Cancelemos, y se ejecuta el código del evento solamente si Aceptamos.
jueves, 17 de septiembre de 2009
GPS
Este post es un poco distinto a los otros, pero solo les quiero contar algo que yo no sabía, y como lo importante no es saber sino "tener el teléfono de quien sabe", le agradezco a Federico que me desasno.
Bueno la historia empieza así, hace poco me compre un teléfono que tiene GPS, y desde ese momento empecé a pensar un poco (cosa que me da muy de vez en cuando). Entonces yo sabía que el celular tenía una antena, y esta antena se conecta con los satélites para saber cuál es la latitud y longitud para que luego el celular o el equipo GPS nos muestre en el mapa la calle en que esta, etc. Etc.
Pero mi pregunta era, los satélites, ¿quién los paga? ¿De quién son?
Entonces como les comente mi amigo Federico que esta mucho mas empapado en el tema me comento que los satélites GPS son todo de Estados Unidos, y que ellos lo mantienen y hacen con ellos lo que quieren, por ejemplo me comento que hay 3 franjas de colores, que la normal es en la modalidad que los satélites andan siempre y que nos ubican muy bien, es decir hay un error muy pequeño, luego en la segunda franja, te dan la ubicación con 1 km de error, y en la última no te dan nada, y está claro porque no?, pienso yo (en esa época no tenia GPS así que no les puedo comentar) el 11 de septiembre cuando les tiraron las torres, que en ese momento se pasaría obviamente a la ultima franja. También tienen satélites GPS otros países (Rusia obviamente) pero que estos satélites y la norma se llaman distinto (es decir no se llaman GPS) y que no son accesibles para el resto del mundo.
Sé que no es muy técnico lo que comente pero es un buen punto si se quiere investigar un poco más.
sábado, 12 de septiembre de 2009
Data Provider Genexus X
La idea de este post no es enseñar lo que es un Data Provider, que es uno de los tipos de objetos nuevos en Genexus, sino solamente dar un pequeño ejemplo de como utilizarlo para tener en nuestra aplicación un menú superior.
sábado, 15 de agosto de 2009
Conatenar mp3's
Encontré un audio libro en Internet que esta en formato mp3, pero esta dividido en muchos archivos, estuve buscando algunos programas para concatenarlos y no encontré ninguno, pero en las búsquedas que hice me salio un comando en Linux que lo hace, y como es tan tan tan fácil, lo voy a postear.
Creo que seguir escribiendo ya es perder tiempo.
cat primer.mp3 segundo.mp3 ....... > todo.mp3
hay veces que Linux hace tan fácil las cosas que en windows son imposibles que todavía me sigue sorprendiendo.
miércoles, 12 de agosto de 2009
Ajax con prototype, un poco de javascript y JSON
Bueno la primer pregunta es para que me sirve ajax, o por que utilizarlo.
Bueno más que explicar que es ajax vamos a dar unos pequeños ejemplos para que lo entiendan.
Ejemplo 1, supongamos que queremos en una página de registro común, que se vayan validando los datos.
Como se hacía antes, se dejaba ingresar todos los datos, y luego cuando se confirmaba se verificaba todo, entonces si había algún error se le decía al usuario que es lo que estaba mal.
Como se hace con ajax, cuando el usuario digita por ejemplo el nombre de usuario, al tabular, ya le podemos decir si hay otro con ese nombre y que elija otro, cuando digita el mail, al tabular ya le podemos decir si es válido o no, etc, entonces al confirmar ya sabemos que está todo bien ingresado.
Ejemplo 2, el clásico campo país, el cual se carga de la base de datos, y son miles, entonces vamos a suponer que tenemos una consulta en la que se filtra por el país.
Como se hacía antes, bueno son varias las opciones, una es que se deje ingresar cualquier cosa y luego al hacer la consulta en la base de datos hacemos un like, la otra es poner un combo el cual sería enorme
Como se puede hacer ahora, en el texto donde se digita el pais, por cada una de las letras que el usuario va a digitar se va a buscar todos los países que contenga esas letras, ejemplo si digito a, muestro argentina, Argelia, Alemania, luego digito r (ar en total) muestro argentina, Argelia, y así sucesivamente.
Entonces, un poco más técnico, lo que hace ajax, es sin tener que refrescar la pagina, ir al servidor y obtener los datos de la base de datos, entonces esto lo que hace es que los usuarios vean mayor interactividad de la pagina.
Y algo que el usuario no ve, pero que hace ajax es que nos obliga un poco a los programadores a modularizar las cosas y sobre todo a separar un poco la interface de la lógica y de la persistencia.
Ahora vamos a empezar con la parte técnica.
Primero que nada para crear la instancia de ajax, tenemos que pasarle varios parámetros, entonces para facilitarnos la cosa vamos a crear una función javascript para hacer esto.
Entonces en un js, yo lo llamo libreria.js pero se puede llamar como sea, tenemos que crear una función con este código
function peticionAJAX(metodo,parametros,oncomplete){
this.parameters=parametros;
this.method=metodo;
this.onComplete=oncomplete;
}
Esta función no tiene nada complicado sino solo se cargan los parámetros al objeto peticionAJAX
Vamos a suponer un ejemplo en el que lo que queremos obtener son los usuarios de un determinado país. Entonces vamos a crear una función que nos va a escribir el html de la tabla donde se van a tirar los usuarios.
function BuscoUsuarios(pais){
miPeticion=new peticionAJAX('get','pais='+pais,FinBuscarUsuarios);
url="php/getUsuarios.php";
aRequest=new Ajax.Request(url,miPeticion);
}
Vamos a detallar cada renglón.
miPeticion=new peticionAJAX('get','pais='+pais,FinBuscarUsuarios);
aca lo que se esta haciendo es creando el objeto miPeticion, que es la función que creamos antes, con los siguientes parámetros, get, que es la forma que se va a obtener los parámetros el php, las opciones son 2, get o post, la regla en general es si se va a modificar datos en la base de datos deben pasarse los parámetros por post, si no se modifican es get.
el segundo parámetro son los parámetros que va a recibir nuestro php
luego el ultimo parámetro es el nombre de la función que se llamara cuando nos conteste el php con algún dato.
url="php/getUsuarios.php";
aca solo le decimos donde este el php, yo para ser prolijo tengo una carpeta php para los archivos php
aRequest=new Ajax.Request(url,miPeticion);
aca lo que hacemos es creamos la instancia Request de ajax, que es lo que quiere decir esto, en definitiva aca es donde se ejecuta el ajax.
bueno segun vemos ahora tenemos que tener un función llamada FinBuscarUsuarios, y un php que llamado getUsuarios.php
la función FinBuscarusuarios, es la que va a recibir el vector que nos devuelva el php y va a pintar en un html.
Empecemos por decir que tiene nuestro html ,bueno lo unico que nos interesa que tenga es una div que es en la que vamos a tirar el html, seria algo asi
Vamos a hablar un poco del php, y como dijimos en el encabezado, vamos a usar JSON, entonces el php deberia de ser algo asi
require_once('JSON.php');
include('conexion.php');
$json = new Services_JSON();
$b = Conexion();
$pais=$_GET["pais"];
$q="select * from usuarios where UsuPais= '$pais' ";
$rs=mysql_query($q);
$unCol=mysql_fetch_array($rs);
$i=0;
while($unCol != null){
$elCol=array('usu'=>$unCol["UsuCod"] );
$junCol=$json->encode($elCol);
$vec[$i++]=$junCol;
$unCol=mysql_fetch_array($rs);
}
if($i!=0){
$retorno=$json->encode($vec);
}else{
$retorno="NO_HAY_DATOS";
}
echo($retorno);
?>
Vamos a explicar un poco cada uno de los renglones empezando por la inclusión de JSON
En el primer renglón, como dije, estamos incluyendo la clase php JSON, les aconsejo bajarse la últimos (igual que prototype), mas adelante explicaremos más en detalle por que usar JSON.
En el segundo renglón, estamos incluyendo el archivo php para la conexión a al base de datos.
Luego creamos dos variables una de json y la otra de nuestra conexión
En el siguiente renglón es donde obtenemos el parámetro que nos envió la función, en nuestro caso es el país.
Lugo en los siguientes 3 renglones vamos a definir la consulta sql, y a posicionarnos en el primer registro.
Luego definimos la variable i que es la que va a recorrer el vector para el resultado, y empezamos a recorrer los datos que nos devolvió la base de datos.
Dentro del while lo que hacemos es primero obtener el dato concreto que necesito y creamos un vector, luego (aca empieza un poco de JSON) encodeamos este vector, y lo ponemos nuevamente en un vector, entonces vamos a tener un vector en el que va a tener todas las tuplas que obtuvimos de la base de datos, y en cada casillero del vetor, tendremos las tuplas que queramos, en nuestro cas la tupla consta de un solo registro, el usuario, pero si quisiéramos además del usuario, poner el país, entonces tendremos 2 datos.
Y al final lo que hacemos es si entramos por lo menos una vez en el while (if i!=0) entonces encodeamos nuevamente el vector entero que vamos a devolver
Con esto tenemos terminado nuestro php, que es el que se va a conectar con la base de datos.
Bueno entonces ahora lo que nos falta es la función que se llama cuando la consulta devuelve algún dato, es la función que pusimos en la que ya definimos, entonces sería algo así
function FinBuscarUsuarios(aRequest){
obj=$("mensaje")
jUnaCol=aRequest.responseText;
if ((jUnaCol == 'NO_HAY_DATOS') || (jUnaCol == '')){
obj.innerHTML = "Ocurrio un error, por favor intente de nuevo";
} else {
obj=$("contenedor");
var vec = jUnaCol.parseJSON();
...
}
}
Bueno explicaremos renglón a renglón que es cada cosa.
Primero que nada, si hay algún problema con la base de datos por ejemplo, entonces no llegamos a obtener ningún dato, en la pantalla del usuario le daremos un mensaje de error (ya les explicare como), entonces debemos de tener un div para desplegarlo (también ya les explicare).
El segundo renglón es el más importante, y acá es donde trabaja ajax, en este renglón lo que se hace es cuando el objeto php devuelve algo este renglón es el que se entera.
Después tenemos un if en el que si el resultado del php es que no encontró nada o si esta vacio entonces, se desplego un mensaje que es el siguiente renglón
Ahora si nos devolvió algo el php, entonces ahora debemos de escribir el html para desplegar en la pagina, y esto también lo tiraremos en una div (todo este código no lo pongo porque puede ser cualquier cosa).
En la siguiente línea debemos de des-encodear (no debe de existir la palabra, pero se entiende lo que quiero decir) el vector que encodemaos en el php (acá se utiliza JSON que es el que se encarga de enviar el vector de un lado al otro y optimizar esto).
Como les dije con esto ya estaría todo pronto, pero falta la parte que ve el usuario, hasta ahora nada de lo que pusimos tiene nada de interface, es decir no lo va a ver nunca el usuario, entonces te explicare brevemente que tienes que usar en tu html para que el usuario vea algo.
Como te mostré arriba con obj=$("mensaje") (esto del $ es algo de prototype, si no usaras prototype deberias de poner getElementByID) y obj=$("contenedor"), que son 2 div, es donde el usuario ve algo.
Entonces en el html tu lo único que tienes que poner es lo siguiente (o algo parecido, depende si queres poner scrolls, en distintos nivesles, etc. para mas datos investigar div en html)
Cuando en la función ponemos obj.innerHTML = " algun texto ", esto lo que hace es escribir directamente en la div, y el usuario ve lo que escribiste dentro de las comillas, pero si en vez de texto pelado, pones texto en el que tenga algo html, por ejemplo "hola
como
te va", esto se verá como un html y serán 3 renglones (espero ser claro, si no lo soy pruébalo).
Entonces la parte mas importante de todas es escribir bien el código html en la div contenedor, que ahi es donde mostraremos al usuario todos los usuarios que sean de un pais indicado.
Lo que nos falta para el html es incluir las librerías que utilizamos esto sería algo así
o cualquier otra que utlices
Con esto (obviamente es un ejemplo muy sencillo) ya estamos usando ajax y para el usuario va a ser mucho mas interactivo y no dependiendo tanto la conexión y el refresh de la pagina.
Para mí lo mas impórtate (del punto de vista del desarrollador) es que separamos la persistencia, la interfaz de usuario, y la logica, haciendo software mucho mas de calidad.
Un breve resumen para que veas que toda la chachara de arriba no es nada muy complicado.
1 - tener el php que nos devuelve los datos de la base de datos.
2 - tener las funciones en algún js que se ejecuten y cuando le devuelvan los datos pinten el html
3 - tener un html limpio (y es lo mas lindo de esto) en el que se mostraran los datos.
A continuación copiare las funciones y el php que he puesto arriba
function peticionAJAX(metodo,parametros,oncomplete){
this.parameters=parametros;
this.method=metodo;
this.onComplete=oncomplete;
}
function BuscoUsuarios(pais){
miPeticion=new peticionAJAX('get','pais='+pais,FinBuscarUsuarios);
url="php/getUsuarios.php";
aRequest=new Ajax.Request(url,miPeticion);
}
function FinBuscarUsuarios(aRequest){
obj=$("mensaje")
jUnaCol=aRequest.responseText;
if ((jUnaCol == 'NO_HAY_DATOS') || (jUnaCol == '')){
obj.innerHTML = "Ocurrio un error, por favor intente de nuevo";
} else {
obj=$("contenedor");
var vec = jUnaCol.parseJSON();
...
}
}
require_once('JSON.php');
include('conexion.php');
$json = new Services_JSON();
$b = Conexion();
$pais=$_GET["pais"];
$q="select * from usuarios where UsuPais= '$pais' ";
$rs=mysql_query($q);
$unCol=mysql_fetch_array($rs);
$i=0;
while($unCol != null){
$elCol=array('usu'=>$unCol["UsuCod"] );
$junCol=$json->encode($elCol);
$vec[$i++]=$junCol;
$unCol=mysql_fetch_array($rs);
}
if($i!=0){
$retorno=$json->encode($vec);
}else{
$retorno="NO_HAY_DATOS";
}
echo($retorno);
?>
Algunas funciones php y js
Algunas de las tantas funciones php y js que siempre hay que tener a mano
Primero las funciones js
obtener un una parte de un texto
res = origen.substring(0,3)
ejemplo "123456789" obtenemos "123"
obtener la posición de un caracter, o de un conjunto de caracteres
cadena.indexOf("4")
devuelve un numero menor a 0 si no existe, y si existe devuelve la posición
ejemplo "123456789" cadena.indexOf("4") = 3 (recordar que el 1 esta en la posición 0)
ejemplo "123456789" cadena.indexOf("23") = 1
eliminar los espacios antes y después de un texto
res = trim(origen)
ejemplo trim(" 123 ") = "123"
ejemplo trim(" 1 2 3 ") = "1 2 3"
obtener el largo de un texto
res = cadena.length
ejemplo texto = "123", texto.length = 3
ejemplo texto = "123 456", texto.length = 7
Ahora algunas funciones php
eliminar los espacios antes y después de un texto
$res = trim($origen)
ejemplo trim(" 123 ") = "123"
ejemplo trim(" 1 2 3 ") = "1 2 3"
obtener el largo de un texto
$res = strlen(cadena)
ejemplo texto = "123", strlen(texto) = 3
ejemplo texto = "123 456", strlen(texto) = 7
obtener un una parte de un texto
res = substr($cadena, 0, -4)
ejemplo $cadena = 12345678, substr($cadena , 0, -4) = 1234
ejemplo $cadena = 12345678, substr($cadena , -4) = 5678
bueno estas como dije son algunas, como son muy usadas y muy potentes las posteo.