coge la información y corre

Reproductor mp3 flash ultraligero

29 de Octubre del 2008 Escrito por Alex Barros

Hoy voy a hacer un post ligerito. Ligerito como el reproductor flash de mp3 niftyPlayer.

Simplemente se trata de un reproductor de mp3, hecho con la tecnología flash, listo para integrarse en una web. Además podemos interactuar con él de forma muy sencilla via JavaScript.

Cómo usarlo

Una vez hayamos descargado los archivos necesarios, sólo hay que insertar este código en nuestro documento web:

  1. <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="165" height="38" id="niftyPlayer1" align="">
  2.   <param name=movie value="niftyplayer.swf?file=betty.mp3&as=1">
  3.   <param name=quality value=high>
  4.   <param name=bgcolor value=#FFFFFF>
  5.   <embed src="niftyplayer.swf?file=betty.mp3&as=1" quality=high bgcolor=#FFFFFF width="165" height="38" name="niftyPlayer1" align="" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">
  6.   </embed>
  7. </object>

Lo único que tenemos que editar es, en la segunda fila, las variables GET file y as. “file” es el nombre del archivo .mp3, y as valdrá 1 si queremos que empiece a reproducir automáticamente, o 0 (cero) de lo contrario.

Interacción JavaScript

Es realmente sencillo. Lo primero de todo es incluir en la cabecera del documento HTML esta línea:

  1. <script type="text/javascript" language="javascript" src="niftyplayer.js"></script>

Los métodos de que disponemos son los siguientes:

Play Toggle

Si el reproductor estaba en play, pasa a pause, y viceversa

  1. niftyplayer(‘niftyPlayer1′).playToggle()

O también Play y Pause por separado

  1. niftyplayer(‘niftyPlayer1′).play()
  1. niftyplayer(‘niftyPlayer1′).pause()

Stop

Detiene la canción y se va al principio

  1. niftyplayer(‘niftyPlayer1′).stop()

Cargar nuevo archivo mp3

  1. niftyplayer(‘niftyPlayer1′).load(‘nombre_archivo.mp3′)

Si queremos cargar, y a continuación empezar a reproducirlo:

  1. niftyplayer(‘niftyPlayer1′).loadAndPlay(‘nombre_archivo.mp3′)

Asociar eventos del reproductor

Por ejemplo, asociamos una función nuestra al evento de comenzar la reproduccion (play)

  1. niftyplayer(‘niftyPlayer1′).registerEvent(‘onPlay’, ‘alert(\’Has pulsado play!\’)’)

También contamos con los eventos onPause y onStop

Obtener estado del reproductor

Devolverá un texto de entre “playing“, “stopped” y “paused“, dependiendo del estado del reproductor

  1. alert(niftyplayer(‘niftyPlayer1′).getState())

Y eso es todo! Fácil, verdad? Qué te parece esta aplicación? La usarás? Para qué?
Te espero en los comentarios, ahí siempre hace buen clima n_n

Categorias: Aplicaciones, Boozox, JavaScript | 2 comentarios »

Curiosidad en la sintaxis del SELECT

27 de Octubre del 2008 Escrito por Alex Barros

Hace poco descubrí una curiosidad de SQL símplemente revisando la documentación del SELECT. Por eso creo que es interesante repasar la sintaxis oficial, para que no se nos escape nada.

  1. SELECT
  2.     [ALL | DISTINCT | DISTINCTROW ]
  3.       [HIGH_PRIORITY]
  4.       [STRAIGHT_JOIN]
  5.       [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
  6.       [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
  7.     select_expr, …
  8.     [FROM table_references
  9.     [WHERE where_condition]
  10.     [GROUP BY {col_name | expr | position}
  11.       [ASC | DESC], … [WITH ROLLUP]]
  12.     [HAVING where_condition]
  13.     [ORDER BY {col_name | expr | position}
  14.       [ASC | DESC], …]
  15.     [LIMIT {[offset,] row_count | row_count OFFSET offset}]
  16.     [PROCEDURE procedure_name(argument_list)]
  17.     [INTO OUTFILE ‘file_name’ export_options
  18.       | INTO DUMPFILE ‘file_name’
  19.       | INTO var_name [, var_name]]
  20.     [FOR UPDATE | LOCK IN SHARE MODE]]

La curiosidad

Lo que yo desconocía es que es posible ordenar los resultados por dos campos o más. Es decir, hacer la ordenación en función de varios parámetros.

Un ejemplo:

  1. SELECT a,b,c FROM mi_tabla WHERE a > 100 ORDER BY b,c

En este Select, los resultados son ordenados según b y c de la mejor forma posible. Puede que ni b ni c queden ordenados estrictamente, sinó que adoptan las mejores posiciones para estar ordenados por ambos a la vez.

Yendo más lejos aún, podemos especificar campo a campo si queremos que se ordene ascendentemente o descendientemente, combinando varios criterios.

  1. SELECT a,b,c FROM mi_tabla WHERE a > 100 ORDER BY b ASC,c DESC

Categorias: MySQL | 2 comentarios »

Guia básica para editar imágenes en PHP con GD

14 de Octubre del 2008 Escrito por Alex Barros

Crear y editar imágenes con PHP puede ser muy fácil si tienes instalada la biblioteca GD en tu servidor.

Aunque las opciones que ofrece GD son muy básicas, son suficientes para desarrollar scripts con capacidades muy superiores. Ahora voy a presentaros estas funciones básicas con ejemplos, para que puedas crear aplicaciones más complejas.

Crear la imagen de cero o desde un archivo

Para tratar imágenes en GD trabajamos con recursos o variables tipo resource de imágenes. Esto es una varible que representa a la imagen.

Para crear un nuevo recurso de imagen podemos usar la función imagecreate() aúnque es más recomendable usar la función imagecreatetruecolor()

  1. $im = imagecreatetruecolor(300, 200); //a partir de aqui trabajo con una imagen de 300×200
  2. $im2 = imagecreatetruecolor(100, 100); //he creado otra imagen distinta con dimensiones 100×100

Si queremos partir de una imagen ya existente, para convertirla en recurso tendremos que usar la función adecuada dependiendo del formato de la imagen. Los principales formatos son JPEG, PNG y GIF; con las funciones imagecreatefromjpeg(), imagecreatefrompng() y imagecreatefromgif() respectivamente.

  1. $miJpeg =imagecreatefromjpeg(‘miimagen.jpg’); //he creado un recurso a partir del archivo miimagen.jpg

Si quieres ahorrarte el pensar a la hora de crear un recurso a partir de imagen, o desconoces el formato de entrada de la imagen (y quieres que lo haga automáticamente) puedes usar esta función para crear cualquier tipo de imagen.

  1. function newimage($src) {
  2.     $im = false;
  3.     switch(true) {
  4.         case eregi(‘http://’, $src):
  5.             $im = imagecreatefromstring( getUrlData($src) );
  6.             imagealphablending($im, true);
  7.             imagesavealpha($im, true);
  8.         break;
  9.         case eregi(\.jpg’, $src):
  10.             $im = imagecreatefromjpeg($src);    
  11.         break;
  12.         case eregi(\.gif’, $src):
  13.             $imp = imagecreatefromgif($src);
  14.  
  15.             $x = imagesx($imp);
  16.             $y = imagesy($imp);
  17.             $im = imagecreatetruecolor($x, $y);
  18.             imagefilledrectangle( $im, 0, 0, $x, $y, imagecolorallocate($im, 255, 255, 255) );
  19.             imagecopy($im, $imp, 0, 0, 0, 0, $x, $y);
  20.         break;
  21.         case eregi(\.png’, $src):
  22.             $im = imagecreatefrompng($src);    
  23.  
  24.             imagealphablending($im, true);
  25.             imagesavealpha($im, true);
  26.         break;
  27.     }
  28.     return $im;
  29. }
  30. function getUrlData($url){
  31.     $ch = curl_init($url);
  32.     curl_setopt($ch, CURLOPT_FAILONERROR, 1);
  33.     curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
  34.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  35.     $get = curl_exec($ch);
  36.     curl_close($ch);
  37.     return $get;
  38. }

[descargar código]

Esta función puede crear una imagen a partir de JPEG, PNG, GIF o URL (requiere CURL)

Si queremos saber las dimensiones de un recurso de imagen, usaremos las funciones imagesx($im) e imagesy($im) que devuelven el ancho y alto del recurso, en píxeles, respectivamente.

Copiar, recortar y redimensionar

La modificación más básica que podemos hacer a una imagen es recortarla y redimensionarla.

En ambos casos la forma de trabajar es, en primer lugar crear un nuevo recurso con las dimensiones apropiadas, y en segundo lugar copiar de la imagen origen a la imagen destino aplicando el cambio deseado.

Recortar una imagen

Para recortar una imagen de, por ejemplo, 500 x 400 en 50px por la derecha y por abajo, haremos lo siguiente:

  1. Creamos un nuevo recurso de 500 – 50 = 450 por 400 – 50 = 350px
  2. Usamos la función imagecopy para copiar de la imagen origen, en nuestra nueva imagen

    bool imagecopy ( resource $im_destino , resource $im_origen , int $pos_x_destino , int $pos_y_destino , int $pos_x_origen , int $pos_y_origen , int $ancho_origen , int $alto_origen )

  3. Los dos primeros parámetros son los recursos destino y origen
  4. Los dos siguientes son la posición en eje x e y de la imagen destino, donde queremos comenzar a copiar (en nuestro caso 0,0; porque el eje está arriba y a la izquierda)
  5. Los dos siguientes son el ancho y el alto de la imagen que queremos recortar del aimagen original. En nuestro caso 450 y 350.
  1. $im_origen = imagecreatefromjpeg(‘mi_imagen.jpg’); //sabemos que mide 500 x 400
  2. $im_destino = imagecreatetruecolor(450, 350); //im_destino contendrá la nueva imagen recortada
  3.  
  4. imagecopy($im_destino, $im_origen, 0, 0, 0, 0, 450, 350);
  5. // Ahora im_destino es im_origen recortada por abajo y por la derecha 50px

[descargar código] Ejemplo: [original] [recortada dinámicamente]

Redimensionar una imagen

En este ejemplo vamos a redimensionar a la mitad la imagen origen, sea cual sea su tamaño.

Crearemos primero un nuevo recurso con las dimexiones x/2 e y/2, y usaremos la función imagecopyresampled() (también podríamos usar imagecopyresized(), pero la que vamos a usar suaviza los píxeles interpolándolos – tiene mejor calidad)

  1. $im_origen = imagecreatefrompng(‘foo.png’);
  2. $ancho = imagesx($im_origen);
  3. $alto = imagesy($im_origen);
  4.  
  5. $nuevo_ancho = round($ancho / 2);
  6. $nuevo_alto = round($alto / 2);
  7.  
  8. $im_destino = imagecreatetruecolor($nuevo_ancho, $nuevo_alto);
  9. imagecopyresampled($im_destino, $im_origen, 0, 0, 0, 0, $nuevo_ancho, $nuevo_alto, $ancho, $alto);
  10. // ahora im_destino es la mitad de grande que im_origen

Dibujar figuras y texto

Las figuras que GD nos deja pintar son muy básicas, parecidas a las que ofrece el programa Paint

En este punto lo más importante es crear colores para una imagen. Los colores se deben crear y asociar a una imagen mediante la función imagecolorallocate(). El color lo indicamos mediante parámetros RGB (Red Green Blue) que podemos extraer fácilmente de cualquier paleta, como la del Photoshop o el Gimp

Dibujar un rectángulo

Quizás la figura más simple. Podemos dibujar sólo el borde del rectángulo con la función imagerectangle() o el rectangulo relleno de color, con la función imagefilledrectangle()

bool imagerectangle ( resource $imagen , int $x1 , int $y1 , int $x2 , int $y2 , int $color )

bool imagefilledrectangle ( resource $imagen , int $x1 , int $y1 , int $x2 , int $y2 , int $color )

  1. $imagen = imagecreatefromjpeg(‘mi_imagen.jpg’);
  2. $negro = imagecolorallocate($imagen, 0, 0, 0);
  3. //voy a dibujar un rectangulo negro entre las coordenadas (5,5) y (25,15), recuerda que el eje está arriba a la izquierda
  4. imagefilledrectangle($imagen, 5, 5, 25, 15, $negro);

Otras figuras

Existen muchas figuras que puedes dibujar con GD, desde una línea hasta un polígono, pasando por la elipse o el píxel. Sólo busca la que más te conviene en la documentación, o combina varias para obtener la figura deseada.

Escribir texto

Es realmente sencillo. Si no te quieres complicar la vida, puedes usar la función imagestring() que te da la opción de elegir entre 5 fuentes internas indicando sólo el número de referencia…

  1. $im = imagecreate(100, 30); //creo una nueva imagen de 100×30
  2. $fondo = imagecolorallocate($im, 255, 255, 255); //blanco. El primer color creado, se utiliza como fondo automaticamente para esa imagen
  3. $color_texto = imagecolorallocate($im, 0, 0, 255); //azul
  4. // escribo la cadena arriba a la izquierda con la fuente #5
  5. imagestring($im, 5, 0, 0, "¡Hola mundo!", $color_texto);

… o si quieres tener más control sobre el estilo, puedes usar fuentes TrueType con la función imagettftext() (en la web DaFont tienes miles de fuentes TrueType gratuitas)

  1. $im = imagecreatetruecolor(400, 30); //creo una nueva imagen de 400×30
  2. // creo algunos colores
  3. $blanco = imagecolorallocate($im, 255, 255, 255);
  4. $gris   = imagecolorallocate($im, 128, 128, 128);
  5. $negro  = imagecolorallocate($im, 0, 0, 0);
  6. imagefilledrectangle($im, 0, 0, 399, 29, $blanco); //relleno el fondo
  7.  
  8. // El texto a pintar
  9. $texto = "Boozox.net";
  10. // El archivo ttf, escribe la ruta correctamente!!
  11. $fuente = ‘fuente.ttf’;
  12.  
  13. // Agrego una sombra al texto
  14. imagettftext($im, 20, 0, 11, 21, $gris, $fuente, $texto);
  15.  
  16. // Escribo el texto
  17. imagettftext($im, 20, 0, 10, 20, $negro, $fuente, $texto);

[descargar código]
Demo:

Tratar bien la transparencia en PNG

Las imágenes PNG admiten un canal Alpha que indica la opacidad en cada punto de la imagen, para crear efectos semitransparentes. Si te interesa que esta transparencia se muestre correctamente, deberás calentarte un poco más la cabeza, y tener el canal Alpha siempre en cuenta. Te aconsejo que incluyas estas dos líneas después de crear una nueva imagen con transparencia (aunque tendrás que estar siempre atento de que el canal alpha no se pierda!)

  1. $im = imagecreatefrompng(‘mi_transparencia.png’);    
  2. //conservar transparencia
  3. imagealphablending($im, true);
  4. imagesavealpha($im, true);

Recuerda también que puedes crear colores con canal de transparencia usando imagecolorallocatealpha() en lugar de imagecolorallocate()

Exportar la imagen para visualizarla

Después de haber modificado nuestra imagen tal como deseamos, tendremos que exportarla. Existe una función para cada formato de salida (imagejpeg(), imagepng(), imagegif(), etc…). Personalmente te recomiendo siempre exportar en PNG porque se conserva la calidad y la nitidez mucho mejor.

En todos los casos tendremos la opción de generar el código de la imagen, si queremos que el archivo PHP simule ser la propia imagen, o indicarle dónde queremos que almacene la imagen resultado.

Para el primer caso, tendremos que indicar mediante las cabeceras que lo que estamos a punto de mostrar es una imagen. Para esto usamos la función header() indicando el tipo de archivo en concreto de que se trata (image/jpeg, image/png o image/gif).

  1. //este codigo se incluiria al final del proceso de edicion, suponiendo que $im es el recurso de la imagen que queremos mostrar
  2. header("Content-type: image/png");
  3. imagepng($im);

Una vez creado este archivo, podemos mostrar el resultado en una página HTML simplemente creando una etiqueta de imagen que referencie a ese archivo .php

  1. <img src="imagen.php" />

Si queremos almacenar en nuestro disco la imagen resultante, tendremos que pasar como segundo parámetro a la función el nombre del archivo que queremos generar.

  1. imagepng($im,‘ruta/miarchivo.png’);

Recuerda que me interesa mucho tu opinión. Crees que falta algo? tienes dudas? vas a trabajar con la librería GD ahora que sabes cómo funciona? has hecho experimentos curiosos con imágenes dinámicas? …

Categorias: Código, Imagen Digital, PHP, Ubuntu | 42 comentarios »

Sorteo camiseta de ThinkGeek: la resolución

11 de Octubre del 2008 Escrito por Alex Barros

Ha ocurrido! 20 personas han participado en el sorteo que propuse.

Quiero dar las gracias antes que nada a todos los que habéis comentado, y espero que no perdáis la costumbre! Me encanta oir lo que pensáis.

Lo importante es participar, pero sólo uno puede ganar. En este caso el gran vencedor (del azar) ha sido…

(redoble…)

Xavier !!!!

Mi enhorabuena, el departamento de sorteos de Boozox (yo con peluca y bigote) se pondrá en contacto cotigo por e-mail en breve para que concretemos la entrega del premio.

La cosa ha ido así:

Timestamp del comentario de Vengador (persona #20): 1223716228 (28 / 2 = 14)
Comentaristas por orden:

Próximamente más noticias sobre este sorteo, y más sorteos a lo loco!

Ah, y no quisiera eclipsar a Xavier (hoy es tu día!) pero hace unos pocos minutos he recibido un mail comunicándome que yo también he ganado un concurso, el de los Gelaskin de HacheMuda! :D

Gracias a este diseño que presenté me voy a llevar el Gelaskin que más me guste.

Concursando con el coco
(Hecho en Gimp, sobre Mac :P )

Categorias: Boozox, Concurso | 4 comentarios »

Programar en Python sabiendo PHP es fácil

9 de Octubre del 2008 Escrito por Alex Barros

Estoy empezando a manejar este lenguaje, y he de decir que me he enamorado! Es sencillo, cómodo, potente, intuitivo…

Además, si estás acostumbrado ya a PHP, no te va a suponer mucho esfuerzo usar este lenguaje. Puedes seguir este increíble manual. Es muy ameno y comprensible.

Voy a hacer una pequeña lista de cosas importantes que cambian entre PHP y Python, y otras cosas dignas de mención:

Los puntos y coma son opcionales a final de línea :D
echo = print
true y false = True y False
NULL = None
Los arrays aqui son listas, y se indican con corchetes (igual que en Javascript)

  1. lista = [1,2,[3,‘a’]]

Si accedes a posiciones negativas en una lista, se cuenta desde el final.

  1. lista[-1] #Esto es el ultimo elemento de lista

Un array asociativo, se llama Diccionario

  1. a = { ‘leche’ : ‘de vaca’ ,  ‘caca’ : ‘de perro’ }
  2. print a[‘leche’] # de vaca

Los if no llevan paréntesis, comienzan con los dos puntos, y su interior está indentado (olvídate de llaves)

  1. if variable == ‘valor’:
  2.         print ‘Valor primero’
  3.         print ‘Otra linea’
  4. else
  5.         print ‘Buuu’
  6.  
  7. print ‘esto ya esta fuera del if’

Condicional ternario

  1. var = “par” if (num % 2 == 0) else “impar”

Un for para recorrer una lista

  1. for i in milista:
  2.         print i, ‘mola’
  3. #alternativa al for tomando valores numéricos
  4. for i in range(5):
  5.         print i,‘ elefantes se balanceaban…’

Declarar una función se hace con def así:

  1. def mi_funcion(param1, param2):
  2.         print param1
  3.         print param2

Se puede ejecutar una función con los parámetros alterados de orden, si especificamos qué parámetro es cada uno

  1. mi_funcion(param2 = 2, param1 = "hola")

A partir de aquí podéis seguir investigando, por ejemplo en incluir librerías externas, en usar GTK para interfaces gráficas, como siempre el límite es vuestra imaginación!

Usas Python? Usarías Python? qué te gusta y qué te jode de él?

No seas tímido! listo para comentar?

Categorias: Python | 15 comentarios »

Celebremos los 100 con.. camisetas de ThinkGeek!

7 de Octubre del 2008 Escrito por Alex Barros

Quisiera enmarcar este día como el día que Boozox pasó de los 100 lectores en Google Reader (no, no uso feedburner…)

reader

Para celebrarlo, escribe un comentario en esta entrada, diciendo cómo llegaste a Boozox o qué es lo que más te gusta del blog o qué es lo que apesta o de qué quieres que escriba o si quieres que pose desunudo para una revista o ….

Si comentan más de 20 personas distintas durante esta semana, todos los que hayan comentado entrarán en un sorteo de la camiseta que más le guste de ThinkGeek

…y si no se alcanza, mala suerte.

Tienes hasta el 14 de Octubre, pero si lo haces YA, eso que te quitas de encima!

(más detalles del sorteo, en el primer comentario)

Categorias: Boozox, Concurso | 30 comentarios »

del.icio.us meneame.net RSS

Buscar:

Bicivalencia Localiza las estaciones de Valenbisi, servicio público de bicicletas en Valencia, España. Ver más Gpsia Descubre y comparte rutas por todo el mundo, tomadas con GPS. Ver más Imaset Edita tus imágenes de Wordpress con este sencillo plugin. Ver más

¡Mi música es tuya!

Digo yo que...

Mis fotos de Flickr

Entradas Recientes

Meta:

Respeta el copyleft

,