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.



Volver al inicio

miércoles, 12 de agosto de 2009

Ajax con prototype, un poco de javascript y JSON

El siguiente post intentara explicar todo lo mejor posible que es ajax y cómo usarlo con prototype que hace un poco mas fácil la vida.

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)

y lo mismo para el contenedor, tu lo que tienes que hacer es investigar bien donde lo pones, como lo pones, etc.

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.


Volver al inicio

domingo, 9 de agosto de 2009

JDownloader

Muchas veces he visto que la gente no sabe usar JDownloader, o no lo quiere utilizar porque es muy complicado. La verdad no lo entiendo porque para mi es de los soft. mas fáciles de usar.




JDowload se usa para descargar archivos de los servidores de RapidShare, MegaUpload, y muchos mas, sin casi ninguna acción por parte del usuario, a diferencia si lo bajan directo de la pagina que tienen que hacer muchas cosas hasta llegar realmente a bajarlos.




Entonces en principio precisamos el software, eso lo buscan en Internet y lo bajan (la pagina oficial es http://www.jdownloader.org/home)




Este software esta hecho con java así que no necesitan instalar nada, pero si necesitan java, en principio solo el JRE, esto también lo bajan de Internet, ambos programas son gratis, así que no tienen que conseguir ningún crack ni serian ni nada que se le parezca.




Luego de tener en zip, rar, tar o lo que sea como hayan conseguido el jdownloader, lo descomprimen en donde les quede mas cómodo. Dentro de la carpeta que descomprimieron van a tener un archivos, JDownloader.exe, que tiene un icono que es un mundo con una cinta amarilla, entonces ejecutan este programa (le hacen doble click por ejemplo) y esto lo que hace es abrir el programa, como se necesita abrir un puerto de tu sistema operativo si tienes algún firewal activado te va a pedir que abras el puerto, por ejemplo si es el de windows hay que poner desbloquear.




Si llegaste a este paso entonces ya se abrió el JDownloader, entonces ahora lo que hay que hacer es buscar en Internet los links para descargar (programas, películas, música, etc.), luego que estemos en la pagina que tiene los links, entonces lo que hacemos es copiamos (si los links están todos juntos mejor, pero si entre los links hay mucho mas texto, no importa copiamos desde el inicio hasta el final, jdownloader se va a dar cuenta cuales son los links para descargar) los links a bajar.


Con esto ya basta para que jdownloades si esta abierto se de cuenta que estas intentando bajar algo y lo pone en sus "pendientes de descarga" (LinkGrabber), y lo unico que hay que hacer es darle "Add al package", esto lo que hace es pasar a Downloaders, es decir que se van a descargar.


Luego de esto puede, si es la primera vez pedirnos que aceptemos los términos del servicio (esto lo hace para cada servidor), le decimos que si, y ya se empieza a descargar los archivos.




Arriba tenemos un "play" y "pause" para iniciar y detener nuestras descargas, quizás si es la primera vez tienes que configurar la carpeta donde se van a descargar nuestros archivos.


JDownloader también puede llegar a descomprimir nuestros archivos, por ejemplo si es una película en dvd, van a ser muchos pedazos de archivos los que vamos a tener que descargar y luego unirlos a todos en uno solo que puede ser un rar, iso, etc., para esto el programa debe de saber si los archivos tiene alguna contraseña, lo que hacemos es hacer doble click en el paquete y se nos abre abajo un lugar para poner la contraseña y si queremos ponerle un nombre al paquete, también si queremos una ruta auxiliar para descargar, etc.




Y listo, de ahora en delante jdownloader se encarga de todo, de poner los captcha, de esperar los segundos que haya que esperar, de continuar con la siguiente, etc.



Volver al inicio