Archivo

Archive for 26 enero 2010

Mp3Spider (Java) ScreenShot

Hoy estuve dando un POOco de jugo (programando) y este es el resultado de lo que llevo hasta el momento:

screenshot  del Proyecto Mp3Spider 2010 Open Source (Java)

Hasta el Momento:

  • Creado motor de Búsqueda / Descarga
  • Creado servidor (proxy)
  • Creado Mp3 Player
  • Busca y reproduce mp3s
  • Muestra Discografías de Artista
  • Interfaz gráfica (penca)

Bugs o Mejorar:

  • Mejorar Servidor Web (Proxy)
  • Crear hilos en la búsqueda de discografías y demás
  • Interfaz Gráfica
  • Filtro (funcionaba y no se que movi xD)
  • Obtener la duración (tiempo) exacta del mp3
  • optimizar todo
  • manejar de mejor forma los hilos
  • Paginar los resultados
  • ScrollerText xD

Se viene:

  • Busqueda de Artistas Similares
  • Busqueda de Tracks Similares
  • Busqueda de (Información || Biografía) Artista
  • Sistema de Usuarios (PHP)
  • Crear Base de datos (Artista,Track,Disco,Usuario,PlayList,etc) (para guardar la información)
  • Reproducción de FLV (para poder reproducir videos musicales de Youtube)
  • ¿ Agregar Descarga de Archivos ?
  • Agregar Motores de Busqueda
  • Mejorar la Interfaz Gráfica
  • Crear PlayLists Locales (pls,aux,mua) y Web (xml,pls,aux,xspf)
  • AutoUpdater

Link del Proyecto: http://kenai.com/projects/mp3spider/

Registrate en kenai y únete

Dudas, Sugerencias e Ideas  Acá.

Saludos!

Proyecto Mp3Spider 2010 Open Source (Java)

Hola los quiero invitar a un proyecto en el que estoy trabajando, es Mp3Spider un meta buscador de música con el que se supone podrás buscar, reproducir, descargar?, discografias, discos, etc.
La idea es crear el mayor programa de música gratuito.
Éste proyecto se basará buscando mp3 en servidores conocidos de archivos como goear.com,esnips.com,wrzuta.pl,etc. además de usar apis (lastfm.es,youtube,google) para tener informacion y cosas relacionadas.

El proyecto lo subí a :
http://kenai.com/projects/mp3spider/

Lo puedes descargar con Netbeans, en el menu “Equipo/Kenai/Abrir Proyecto kenai…” ahí buscan mp3spider . Deben estar registrados en Kenai.com para poder chatear en la sala de chat del proyecto.
Estoy usando SVN

¿En que puedes ayudar?
en verdad hasta el momento solo he hecho un motor de busqueda, claramente no está optimizado, pero realmente es bueno
Falta gente para crear la interfaz gráfica,  el reproductor de musica, servidor, que den ideas o que simplemente den páginas que conoscan donde hallan mp3 para así crear mas motores de búsqueda

¿ Que aprenderas ?
Expresiones Regulares
– Conexiones (Protocolo HTTP)
java.media
– java GUI (substance)
– POO
– Muchas cosas mas xD
Al wiki del Proyecto iré subiendo información

wiki: http://kenai.com/projects/mp3spider/pages/Home

JSON (JavaScript Object Notation || Literal JavaScript) VS XML (Extensible Markup Language)

Bueno esta es una breve comparación que he hecho sobre dos lenguajes intermedios… ¿ a que me refiero con “intermedios” ? Que son lenguajes de intercambio de datos entre aplicaciones.

01.- Definiciones

XML, siglas en inglés de Extensible Markup Language (lenguaje de marcas extensible), es un metalenguaje extensible de etiquetas desarrollado por el World Wide Web Consortium (W3C).

JSON, acrónimo de JavaScript Object Notation, es un formato ligero para el intercambio de datos. JSON es un subconjunto de la notación literal de objetos de JavaScript que no requiere el uso de XML.

02.- Estructura

Ahora dejaré el mismo código escrito en ambos lenguajes

XML

<?xml version="1.0" encoding="utf-8" ?>
<Empleados>
	<Empleado tipo="Honorario">
		<Nombre>Juan Peres</Nombre>
		<Edad>56</Edad>
		<HorasTrabajadas>5</HorasTrabajadas>
		<ValorHora>10</ValorHora>
	</Empleado>
</Empleados>

213 caracteres, 229 bytes 9 líneas

JSON

{ empleados : [
	{
		tipo: "Honorario",
		nombre: "Juan Peres",
		edad: 56,
		HorasTrabajadas: 5,
		ValorHora: 10
	}
]}

120 caracteres, 136 bytes, 9 líneas

Bien hasta aquí bien parecidos, ambos con una estructura jerárquica,aunque JSON aquí saca la primera ventaja:
JSON pesa menos que XML, ésto es gracias a que no usa tags, esto disminuye su peso.

03.- Carga en el Servidor

Bueno siguiendo con el ejemplo anterior les dejo el siguiente caso: Ahora quiero mostrar el sueldo del empleado honorario, eso se hace con la siguiente formula:

Sueldo = HorasTrabajadas * ValorHora

XML

<?xml version="1.0">
<Empleados>
	<Empleado tipo="Honorario">
		<Nombre>Juan Peres</Nombre>
		<Edad>56</Edad>
		<HorasTrabajadas>5</HorasTrabajadas>
		<ValorHora>10</HorasTrabajadas>
		<Sueldo>50</Sueldo>
	</Empleado>
</Empleado>

JSON

{ empleados : [
	{
		tipo: "Honorario",
		nombre: "Juan Peres",
		edad: 56,
		horasTrabajadas: 5,
		valorHora: 10,
		sueldo: function() { return this.horasTrabajadas * this.valorHora }
	}
]}

Aqui se ve la primera diferencia notable de JSON, en el primer caso se hizo un calculo por el lado del servidor, donde internamente se multiplico HorasTrabajadas * ValorHora.
Sin embargo en el caso de JSON sueldo se declara como una función que será procesada por el lado del cliente.En JavaScript lo que esta entre llaves { } se refieren a un Objeto y lo que esta entre corchetes [ ] a un Arreglo

entonces los datos, al estar en un objeto, vienen a ser atributos de dicho objeto, por lo que puedo llamar a esos atributos dentro de la función sueldo  que declaré

sueldo: function() { return this.horasTrabajadas * this.sueldo }

¿ Que ventajas trae ésto ? que el servidor se ahorra el procesamiento de esos cálculos y deja a los clientes que lo hagan por el

04.- Obtención de Datos

Para obtener los datos usaré JQuery Framework para hacerlo aun mas fácil .

Obtener XML

<html>
	<head>
		<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
		<script type="text/javascript">
			$.ajax({
				type: "GET",
				url: 'empleados.xml?random='+(Math.random() * (9999-1111)),
				dataType: "xml",
				success: function(data){
					$('Empleado',data).each(function() {
						$('<p>').append(
							"[Nombre: "+$('Nombre',this).text()+"] [Sueldo: "+$('Sueldo',this).text()+"]"
						).appendTo('#empleados')
					});
				}
			});
		</script>
	</head>
	<body>
		<div id="empleados"></div>
	</body>
</html>

Ejemplo: http://estebanfuentealba.net/ejemplos/jsonVSxml/getXML.html

Obtener JSON

<html>
	<head>
		<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
		<script type="text/javascript">
			$.ajax({
				type: "GET",
				url: 'empleados.json?random='+(Math.random() * (9999-1111)),
				dataType: "json",
				success: function(data){
					$.each(data.empleados,function(i,emp) {
						$('<p>').append(
							"[Nombre: "+emp.nombre+"] [Sueldo: "+emp.sueldo()+"]"
						).appendTo('#empleados')
					});
				}
			});
		</script>
	</head>
	<body>
		<div id="empleados"></div>
	</body>
</html>

Ejemplo: http://estebanfuentealba.net/ejemplos/jsonVSxml/getJSON.html

En el caso de XML hay que BUSCAR los datos en el archivo por tags y de ese resultado sacar el texto, En cambio en JSON , al ser un objeto, puedo acceder a sus propiedades directamente.

Tiempo de descarga (Promedio de 5 Pruebas) :

XML		378,4 ms Aprox
JSON		346,6 ms Aprox

05.- Cross Domain

Una de las desventajas de XML es que con Ajax no se puede acceder a algún archivo o WebService de un dominio diferente al que estamos. Esto solo se puede realizar creando un proxy con algún lenguaje de servidor, ocupando nuevamente recursos del servidor (no es optimo)

Para éste ejemplo Tengo un “WebService” en el dominio mp3spider.com.ar

Link del WebService: http://mp3spider.com.ar/WebService.php

Parametro Valor Descripción
datatype string xml o json.
callback string Nombre del metodo a llamar, solo si datatype=json .

Ahora dejaré Las pruebas:

AJAX (Asynchronous JavaScript And XML) Cross Domain

<html>
	<head>
		<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
		<script type="text/javascript">
			$.ajax({
				type: "GET",
				url: 'http://mp3spider.com.ar/WebService.php?datatype=xml',
				dataType: "xml",
				success: function(data){
					$('<p>').append(
						"[Host: "+$('host',data).text()+"]"
					).appendTo('#crossdomain');
				},
				error: function (XMLHttpRequest, textStatus, errorThrown) {
					alert(textStatus);
				}
			});
		</script>
	</head>
	<body>
		<div id="crossdomain"></div>
	</body>
</html>

Ejemplo: http://estebanfuentealba.net/ejemplos/jsonVSxml/crossdomain/crossdomainXML.html

Para poder acceder al WebService Tengo que hacer un proxy en el servidor donde llamo al servicio, en Yahoo explican como hacer uno


AJAJSON (Asynchronous JavaScript And JavaScript Object Notation) Cross Domain

<html>
	<head>
		<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
		<script type="text/javascript">
			$.ajax({
				type: "GET",
				url: 'http://mp3spider.com.ar/WebService.php?datatype=json&callback=?',
				dataType: "json",
				success: function(data){
					$('<p>').append(
						"[Host: "+data.host+"]"
					).appendTo('#crossdomain');
				},
				error: function (XMLHttpRequest, textStatus, errorThrown) {
					alert(textStatus);
				}
			});
		</script>
	</head>
	<body>
		<div id="crossdomain"></div>
	</body>
</html>

Ejemplo: http://estebanfuentealba.net/ejemplos/jsonVSxml/crossdomain/crossdomainJSON.html

Ésta es la mejor ventaja de JSON porque podemos traer datos desde otros dominios sin recurso del servidor, lo que con XML no se puede lograr si no se tiene un proxy. Este crossdomain es gracias a JSONP (JSON with Padding) que es una técnica descubierta el 2005 por gente de YAHOO , consiste en agregar el script a la pagina … supongamos que queremos traer este documento remoto json:

http://mp3spider.com.ar/WebService.php?datatype=json&callback=hola
nos devuelve:

hola({ host: "mp3spider.com.ar" })

Eso quiere decir que se llama a una funcion llamada hola y se le pasa por parametro un objeto que tiene un atributo llamado host. Entonces, para que funcione, deberiamos tener en la pagina de donde llamamos a ese documento json dicho metodo hola

function hola(datos) {
alert(datos.host);
}

quedando algo similar a esto

<html>
	<head>
		<script type="text/javascript">
			/* Defino la funcion que recibirá los datos de la pagina remota */
			function hola(datos) {
				alert(datos.host);
			}
		</script>
		<!-- Agrego el Script Remoto , el callback es el nombre del metodo que lo recibirá en este página -->
		<script src="http://mp3spider.com.ar/WebService.php?datatype=json&callback=hola"></script>
	</head>
	<body>
	</body>
</html>

Ejemplo: http://estebanfuentealba.net/ejemplos/jsonVSxml/crossdomain/JSONPEjemplo.html

En fin JQuery hace eso por debajo sin darnos cuenta.

Con tanta api dando vuelta por el mundo de la web 2.0 JSON es una herramienta que se agradece y bien util. Como pudieron ver en estas comparaciones en el ámbito web agiliza y optimiza el intercambio de datos, por lo que sin ninguna duda me quedo con JSON.

Espero que les sirva ,

Saludos

Crear DLL en C# .NET y llamarla desde JavaScript

Hoy estaba creando un Gadget para Windows 7 con HTML y Javascript, Lo malo es que el gadget tenía que procesar mucho, por lo que aveces se pegaba el navegador, asi que se me ocurrio crear un programa en C# para que el procesamiento lo hiciera .NET y Javascript solo fuera el puente entre la parte grafica (HTML) y el proceso (.NET)….Para eso investigue sobre  librerías en .NET y Interoperabilidad COM lo que me parecio bastante útil he interesante ya que puedo ocupar una librería casi desde cualquier otro lenguaje. En este ejemplo mostraré como usar una DLL escrita en C# desde JavaScript.

Parte 1 Libreria C#

Bueno lo primero es Ejecutar Visual Studio como Administrador

Una vez abierto Nos vamos a :
File / New / Proyecto

Ahora elegimos Class Library y le damos un nombre a nuestro Proyecto

Ya ahora en la misma Class1 que nos auto generó empezaremos a programar. Lo primero es crear una GUID ,una clave que nos identificará nuestra librería, para eso vamos a
Tools / Crear GUID

Seleccionamos la opcion 2 Define GUID y presionamos el boton Copy

Lo que esta en verde claro es nuestra GUID.

Para que Class1 pueda ser visible desde el exterior es necesario importar System.Runtime.InteropServices y hacer unas declaraciones en la clase

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace TestLib {
    [ComVisibleAttribute(true)]  //Deja la clase visible para COM
    [Guid("134FC6AB-E594-4e5b-84F2-5CC612FF69D3")] //GUID que generamos, Identificador de la Libreria
    [ProgId("TestLib.Class")] //Identificador para poder Acceder a esta clase desde el exterior
    public class Class1 {
        public string Hola() {
            return "Hola Mundo desde .NET";
        }
    }
}

Una vez listo el código debemos ir a las propiedades del proyecto

Una vez dentro de las propiedades nos dirigimos a Generar y chequeamos la opción  Registrar para interoperabilidad COM.

Esto permitirá que al generar nuestro proyecto, la librería quede en el registro de windows de la maquina donde se generó, para así poderla ocupar.

Por ultimo generamos nuestra Libreria

------ Operación Generar iniciada: proyecto: TestLib, configuración: Debug Any CPU ------
C:\Windows\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /nowarn:1701,1702 /errorreport:prompt /warn:4 /define:DEBUG;TRACE /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.DataSetExtensions.dll" /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Xml.Linq.dll" /debug+ /debug:full /filealign:512 /optimize- /out:obj\Debug\TestLib.dll /target:library Class1.cs Properties\AssemblyInfo.cs

Compile complete -- 0 errors, 0 warnings
TestLib -> C:\Users\Esteban\Documents\Visual Studio 2008\Projects\TestLib\TestLib\bin\Debug\TestLib.dll
========== Generar: 1 correctos o actualizados, 0 incorrectos, 0 omitidos ==========

Ahora vamos a la carpeta Bin/Debug de nuestro proyecto y debería encontrarse nuestra Librería

Parte 2 HTML + JavaScript

Con la DLL lista ahora solo queda programar la “interfaz gráfica”, en verdad solo mostraré el texto traído desde el método de la librería por una alerta xD

para ello es el siguiente código

<html>
	<head>
		<script type="text/javascript">
			/* Creando una instancia de ActiveXObject para poder acceder a nuestra libreria */
			var obj = new ActiveXObject("TestLib.Class"); /* ProgId de la Clase */
			alert(obj.Hola()); /* llamando al metodo Hola de la DLL */
		</script>
	</head>
	<body>
		<!-- Cuerpo -->
	</body>
</html>

El Anterior código lo guardaré, para testear, con extensión HTA


Y por ultimo Ejecutamos la aplication.hta y debería mostrarnos la alerta con el texto que retorna nuestra librería

Parte 3 Registro Manual para Interoperabilidad COM

Bueno mas de alguno debe preguntarse como es que se linquea la dll que generé (TestLib.dll) con ActiveXObject(“TestLib.Class”); porque no le paso la ruta de la libreria ni nada por el estilo. Bueno lo que hizo Visual Studio al generar el archivo TestLib.dll fue guardar en el registro de windows la ubicación de la DLL y lo asoció a TestLib.Class.
Entonces si ustedes Quieren Ocupar esta dll en sus maquinas no podrán porque en su registro no existe dicha asociación lanzandoles un error como éste:

Para que puedan testearla en sus pcs les dejo un archivo.reg que hice para registrar la DLL.

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\CLSID\{134FC6AB-E594-4e5b-84F2-5CC612FF69D3}]
@="TestLib.Class1"
[HKEY_CLASSES_ROOT\CLSID\{134FC6AB-E594-4e5b-84F2-5CC612FF69D3}\InprocServer32]
@="mscoree.dll"
[HKEY_CLASSES_ROOT\CLSID\{134FC6AB-E594-4e5b-84F2-5CC612FF69D3}\InprocServer32]
"Assembly"="TestLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
[HKEY_CLASSES_ROOT\CLSID\{134FC6AB-E594-4e5b-84F2-5CC612FF69D3}\InprocServer32]
"Class"="TestLib.Class1"
[HKEY_CLASSES_ROOT\CLSID\{134FC6AB-E594-4e5b-84F2-5CC612FF69D3}\InprocServer32]
"CodeBase"="file:///C:/JavaScript + Libreria C Sharp/TestLib.dll"
[HKEY_CLASSES_ROOT\CLSID\{134FC6AB-E594-4e5b-84F2-5CC612FF69D3}\InprocServer32]
"RuntimeVersion"="v2.0.50727"
[HKEY_CLASSES_ROOT\CLSID\{134FC6AB-E594-4e5b-84F2-5CC612FF69D3}\InprocServer32]
"ThreadingModel"="Both"
[HKEY_CLASSES_ROOT\CLSID\{134FC6AB-E594-4e5b-84F2-5CC612FF69D3}\InprocServer32\1.0.0.0]
"Assembly"="TestLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
[HKEY_CLASSES_ROOT\CLSID\{134FC6AB-E594-4e5b-84F2-5CC612FF69D3}\InprocServer32\1.0.0.0]
"Class"="TestLib.Class1"
[HKEY_CLASSES_ROOT\CLSID\{134FC6AB-E594-4e5b-84F2-5CC612FF69D3}\InprocServer32\1.0.0.0]
"CodeBase"="file:///C:/JavaScript + Libreria C Sharp/TestLib.dll"
[HKEY_CLASSES_ROOT\CLSID\{134FC6AB-E594-4e5b-84F2-5CC612FF69D3}\InprocServer32\1.0.0.0]
"RuntimeVersion"="v2.0.50727"
[HKEY_CLASSES_ROOT\CLSID\{134FC6AB-E594-4e5b-84F2-5CC612FF69D3}\ProgId]
@="TestLib.Class"
[HKEY_CLASSES_ROOT\TestLib.Class]
@="TestLib.Class1"
[HKEY_CLASSES_ROOT\TestLib.Class\CLSID]
@="{134FC6AB-E594-4e5b-84F2-5CC612FF69D3}"

Eso lo guardan como InteroperabilidadCOM.reg lo ejecutan y luego de ejecutarlo se supone que debería funcionales en sus maquinas la DLL, ya que fue registrada.

Ojo:

"CodeBase"="file:///C:/JavaScript + Libreria C Sharp/TestLib.dll"

Deben cambiar C:/JavaScript + Libreria C Sharp/TestLib.dll por la ruta donde ustedes tengan la DLL.

Con esto se puede ampliar mucho mas la capacidad de sus aplicaciones porque ahora no es solamente javascript sino que tiene por debajo el poder y fortaleza de .NET y su gran cantidad de clases y librerías ademas de su rápido procesamiento.

Código de Fuente:

http://estebanfuentealba.net/ejemplos/JavaScript + Libreria C Sharp.rar

Espero que les sirva esto, es solo una idea xD

Saludos!

SMS Gratis Via MSN Bot [Movistar/Entel]

Ayer empece a hacer este Bot para msn con el cual podrás enviar SMS a Movistar y Entel.

Para poder Usarlo solo Debes agregarlo a tus contactos de messenger:

sms@estebanfuentealba.net

Una vez agregado y cuando lo veas en linea podrás escribirle los siguientes comandos:

LOGIN [password]

Con este comando te logueas a tu cuenta de SMS (Debes pedirme que te agregue a los usuarios del bot)

SEND [no] [msg]

Envia un SMS al celular [no] con el mensaje [msg] (El celular debe tener un largo de 8 digitos)

STATS

Muestra tus estadisticas

SETNAME [nickname]

Setea un nickname para agregarlo al mensaje

Espero que les sirva,

Saludos!

Categorías:Proyectos Etiquetas: , , , , , , , ,