Archive for the ‘Programación’ Category

Pintadas geeks

Tuesday, May 4th, 2010

img011

Mi (\.|_)vimrc

Wednesday, April 7th, 2010

Fondo negro para mayor descanso de los ojos
Numeración de lineas
Autoindentado
Tabulaciones de 4 caracteres
Y una ventana de buen tamaño (140×60), que si la quiero hacer más pequeña ya lo haré yo.

colorscheme slate
set number
set autoindent
set shiftwidth=4
set columns=140
set lines=60

Jugueteando con los bordes de CSS3

Thursday, March 25th, 2010
Hola

Es increíble lo que se puede hacer solo con una imagen:

Too cool for Internet Explorer

Memcache y la simplicidad

Thursday, February 11th, 2010

Me sigue dando la impresión de que inventos como memcache, que es simple, y de simple que es se nos había ocurrido a todos alguna vez, hagan que evolucione la forma de trabajar en muchos proyectos.

Las cosas que han cambiado radicalmente la forma de trabajar, rara vez nacen de las métricas de calidad del código, de jerarquías interminables y de empresas enormes.

Esto viene a cuento de un post que escribió Ricardo galli hace tiempo y que creo que comenté. Google maps, Wikipedia, memcache, los escritorios compartidos, las maquinas virtuales… Son ideas tremendamente simples que han revolucionado.

Y es que ahora que pienso en memcache, habría hecho las cosas muchísimo mas sencillas en todos los proyectos en los que me he visto involucrado que corrían en mas de un servidor.

(escrito desde el iPod con lo que habrá faltas de ortografía que luego corregiré).

Anuncios en WordPress

Tuesday, January 12th, 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

Monday, January 4th, 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

Monday, July 14th, 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

Friday, February 22nd, 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?

Saturday, September 8th, 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?

Saturday, September 8th, 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.