Archivo de la categoría ‘Programación’

Anuncios en WordPress

Martes, 12 de Enero de 2010

Muchos blogueros quieren tener anuncios en WordPress y optan por la vía de contratarlos de forma individual, sin caer en las garras de Google AdSense. Y es bien cierto que dependiendo del público objetivo a veces es mucho más interesante.

Es por ello que me puse hace tiempo a buscar soluciones para integrar anuncios rotativos en WordPress, pero no terminé de encontrar una solución que me satisfaciera. Por eso, y casi como siempre, acabé montándome el sistema yo mismo.

El tema es incluir en el fichero functions.php de tu theme el siguiente código:

$adIds = array();
$adIds["top"] = 887;
$adIds["sidebar"] = 888;
function getAd ($type="top")
{
    $pages = get_pages('child_of='.$adIds[$type]);
    if(count($pages)>0){
        $id = rand(0,count($pages)-1);
        echo $pages[$id]->post_content;
    }
}

Y una vez hecho esto, podemos crear tantas páginas como secciones de anuncios queramos definir (en el ejemplo tengo 2, top y sidebar), cuyos ids introduciremos en el array que se define antes de la función. Tras ello, con ir introduciendo páginas “hijas” de las definidas en las que esté una imagen u objeto flash, tendremos definidos los anuncios de cada zona.

Ahora, para introducir el anuncio en una parte de nuestra página, para que aparezca uno de los anuncios definidos, basta con incluir:

<?php getAd("sidebar");?>
//para incluir un anuncio del lateral\
(realmente el contenido de una página\
 hija de la que tiene id 888)

Lo cierto es que, ahora que lo pienso, sería interesante pasar como parámetro el “name” de la página que aloja a las páginas hijas, con lo que sería más sencillo. Pero bueno; algún día debería montar un plugin con esto y lanzarlo, pero las ocupaciones diarias me impiden ponerme a ello, así que si alguien se anima bienvenido es.

Felicidades Isaac

Lunes, 4 de Enero de 2010

Para celebrar el cumpleaños de Sir Isaac Newton, Google ha incluido un logo que tiene ramas y unas manzanas. A los 2 segundos de haber cargado la página, una manzana se cae de la rama… Una idea muy bonita, y con un código minimalista. No sé si Google usará alguna suerte de compresor de código (de otros o propio) pero la verdad es que queda bonito:

setTimeout(function(){var h=0,v=1,f=document.getElementById('fall'),i=setInterval(function(){if(f){var r=parseInt(f.style.right)+h,b=parseInt(f.style.bottom)-v;f.style.right=r+'px';f.style.bottom=b+'px';if(b>-210){v+=2}else{h=(v>9)?v*0.1:0;v*=(v>9)?-0.3:0}}},25);google.rein&&google.rein.push(function(){clearInterval(i);h=0;v=1})},2000)

Que podríamos desenredar como:
setTimeout(
function(){
var h=0
v=1
f=document.getElementById('fall')
i=setInterval(
function(){
if(f){
var r=parseInt(f.style.right)+h
b=parseInt(f.style.bottom)-v
f.style.right=r+'px';
f.style.bottom=b+'px';
if(b>-210){
v+=2
}else{
h=(v>9)?v*0.1:0;
v*=(v>9)?-0.3:0
}
}
}
,25);
google.rein&&google.rein.push(
function(){
clearInterval(i);
h=0;
v=1
}
)
}
,2000
)

Que es una bonita y elegante forma de hacer esta animación junto con el rebote (v*=(v>9)?-0.3:0). Tengo curiosidad por saber qué hace google.rein.push y cual es el objetivo del objeto google.rein… ¿Alguna idea? Después de 10 minutos tirando del hilo no me ha quedado claro; y tengo mejores cosas que hacer hoy :)

Ah, Feliz Año 2010

PHP_Incomplete_Class

Lunes, 14 de Julio de 2008

Hoy toca un tema de PHP duro, black metal que dirían algunos. Dándole caña al PHP con los alumnos, hemos encontrado un error de esos que parecen inexplicables, pero que al final tienen explicación. Realmente creo que nunca he encontrado un bug de PHP, al menos un bug bug, ya que esto podría considerarse como, al menos, falta de información útil. No he encontrado nada de esa información útil en castellano, así que vaya, seamos los primeros, allá vamos.

Pues bien, si utilizas la variable $_SESSION para almacenar objetos, y te encuentras al recuperarlo con algo como: Error”__PHP_Incomplete_Class”. Es que ha sucedido un problema en la deserialización, osea, en el proceso de convertir un objeto de una dato binario a algo en memoria, con sus variables, arrays, etc… El tema es que, si cuando la deserialización tiene que ser realizada, el intérprete no sabe de qué tipo de datos es el objeto, no tiene ni idea de cómo hacerlo. Por tanto, esto se soluciona de dos formas:

  1. Mandando todo al garete
  2. Incluyendo la definición de la clase (normalmente a través de un include) ANTES del session_start(). Ten en cuenta que antes de un session_start (o un header) no puede haberse sacado NADA por stdout. Si en el archivo en el que se define la clase se muestra algún carácter (esos echo $query, o espacios antes o después de las etiquetas de php) PHP nos voceará con el tan manido “headers already sent”.

Conclusiones, o conclusions que dirían los ingleses, hoy en día con estos lenguajes interpretados tan maravillosos parece que ellos lo hacen todo por nosotros, pero hay casos en los que o bien no son tan listos como deberían, o les creemos más listos de lo que son. Y sí, quizás PHP ante un proceso de deserialización debería analizar el script a ver si se va a incluir la clase… De cuando en cuando es cuando uno se plantea “¿es PHP un lenguaje poco serio?”. Pues seguramente sí, pero ahí bastante de su gracia.

Miniaturas aleatorias en ZenPhoto

Viernes, 22 de Febrero de 2008

He estado probando ZenPhoto para un proyecto y una de las cosas que me pidió el cliente era que las miniaturas de las galerías fueran aleatorias. Esto es, que sea una foto al azar entre las de esa galería. ZenPhoto es una pequeña maravilla (ahí ahí con PhotoStack), pero esa característica le falta. Así que, como está en PHP y está bajo la GPL, he visto que, insertando en el archivo class-album.php, en la línea 565, lo siguiente:

return $this->getImage(rand(0,$this->getNumImages()-1));

Ya funciona, estaría bien poder configurarlo dentro de cada álbum desde la sección de administración, pero bueno, eso para otro “code bit” :)

Guitar on Wii?

Sábado, 8 de Septiembre de 2007

I’ve been a couple of days trying to get something out from using Wiimote with a PC. By the way I’m learning a lot of SDL. Within a week a guitar-simulation game will be released for the Nintendo DS platform. It’s called Jam Sessions. So I asked myself if it could be possible to do that on Wii.

So, I started programming and within five hours more or less I’ve developped some things and: it’s possible. The idea is: you have 8 chords in the screen and you choose one of them with the nunchuk stick; when you shake the Wiimote in the vertical direction it will produce sound. With “C” you temporary chhange “minor” chords to “major” ones and vice versa. And with “B” you change the screen chords by others, so you can choose. More or less like Jam Sessions does.

How does it look like?

Youtube Wii Guitar Video (spanish)

By now there are only 4 chords and it still is a proof of concept. But after exams I will probably improve it, clean and modularize the code, and release it with the code. It can be a funny thing to show to your friends in a party. I’ve used C language, SDL and libwiimote despite I’d like to try out some SDL bindings like Python one.

Una guitarra en la Wii?

Sábado, 8 de Septiembre de 2007

Llevo un par de días investigando sobre cómo usar el Wiimote en el ordenador. Y de paso estoy aprendiendo SDL, mira tú por dónde.

Pues bien, dentro de poco sale un juego para Nintendo DS que se puede considerar un simulador de una guitarra, se llama Jam Sessions y tiene buena pinta.

Y me preguntaba sobre si esto sería posible en la Wii. Ni corto ni perezoso me puse manos a la obra, desempolvando el C de la carrera, y lo hice. La idea es que estén los 12 acordes con sus menores (que se activarían pulsando el botón “C” del Wiimote), de los cuales aparecen 8 en cada una de las posiciones (vertical, horizontal y diagonales), que se seleccionan moviendo la palanca de control del nunchuck a la vez que se agita el mando. Con el botón “B” se podrá modificar la “tabla” de acordes disponible.

¿Cómo queda? Así:

Por ahora sólo he metido 4 acordes y no es más que una prueba de concepto, pero bueno, a ver si después de exámenes tengo un poquillo de tiempo y lo adecento para liberar el código. Está hecho en C, usando libwiimote y SDL. Cuando sea algo ya más visible, postearé de nuevo y pondré un botón para menear.

Curiosidades de CSS

Martes, 13 de Marzo de 2007

El otro día me surgió la necesidad, osea que lo pidió un cliente, de tener una tabla que se desplaza pero la cabecera siempre se ve, para no perder las referencias de qué contienen cada una de las columnas.

Le dí mil vueltas (algunas rozando lo paranormal) con iframes, divs con la propiedad “position:fixed” y demás cosas. Y cuando tuve acceso a Internet busqué una solución y encontré Pure CSS Scrollable Tables with Fixed Header. Es interesante echarle un ojo, pero tras analizarlo a fondo, se basa en CSS hacks (utilizar errores de parseo de Internet Explorer para que sólo él lea algunas cosas) y, específicamente para IE5, utiliza lo siguiente:

top: expression(
document.getElementById("tableContainer").scrollTop
);

¿Javascript en CSS? Qué raro… ¿Qué será esto? Como me suponía, en la MSDN aparece documentado como si tal, y en el W3C ni habla de él… Osea, que no es estándar, pero con el hack utilizado en esa página se consigue que esto funcione en todos los navegadores.

Puedes leer más sobre expresiones en CSS en CSS Expression Optimization y CSS expressions in browsers other than IE.

Comprimiendo un ogg a mp3

Miércoles, 27 de Septiembre de 2006

Llevo ya meses utilizando Windows de forma residual, digamos un 2% del tiempo, y hoy ha sido la primera vez que me ha surgido una necesidad: pasar de un archivo de audio codificado con Vorbis (suelen llevar extensión ogg) a mp3.

¿Cómo he llegado a esta situación? Cuando por Navidades me compré un reproductor puse como condicion indispesable que reprodujese ogg; no sé si es el mejor códec de audio pero lo que sí sé es que no hay ninguno absolutamente mejor que él, y además es libre. Por cierto, es un Samsung Yepp-1 versión Operación Triunfo posteriormente “sprayeado” para eliminar de mi reproductor cualquier vestigio de ese horrible show televisivo.

Por eso cuando me bajo un disco o una canción lo que automáticamente hago, usando la herramienta mp32ogg (en los repos de Ubuntu):

mp32ogg -q 1 -v -d /media/fat/mp3/Disco_descomprimido/*.mp3

con lo que ya tengo mi música ocupando un tamaño decente y oyéndose genial. Pero hoy una amiga me pidió la canción Part of your world de Skye Sweetnam (magnífica por cierto :D ) en mp3. Cuando alguien me pide eso normalmente les paso la siguiente URL http://www.illiminable.com/ogg/downloads.html#stable (a la que se llega buscando en Google “Directshow ogg codecs”) con lo que ya podrán reproducirlo. Pero ella muy inteligentemente me dijo: “¿y lo podré escuchar en mi reproductor portátil de mp3?”. Vaya, no creo, son pocos los reproductores que pueden hacerlo, así que la tuve que comprimir en mp3…
(más…)