zxblog.laullon.com

German Laullon

FireFox 3 y los Perfiles de Color

Por fin parece que la web empieza a toma en serio el tema de la fotografía. Hasta ahora (con la excepción de Safari) los navegadores no aplicaban gestión del color a las imágenes, solo usaban el perfil sRGB.

En esta gráfica podéis ver una comparativa entre los distintos perfiles:

perfiles de color

Lo que visitéis mi PhotoBlog podéis haber notado como alguna foto parece algo de-saturada, estos es uno de los efectos que se produce cuando se aplica un perfil de color diferente (sRGB) al que yo había usado para procesar la foto (AdobeRGB).

Ahora ya podemos activar la gestión de Perfiles de Color en uno de nuestros navegadores favoritos, FireFox 3, aquí las instrucciones:

  1. Teclea “about:config” en la barra de direcciones.
  2. Confirma la advertencia.
  3. Establece la opción “gfx.color_management.enabled” a “true“.
  4. Reinicia Firefox.

Hala, a disfrutar de las fotos…

Via: numeroF (icluido el gráfico)

Compartir: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • bodytext
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • BarraPunto
  • StumbleUpon
  • TwitThis
  • e-mail

NM: Algoritmos de Ordenación

En esta pagina http://cg.scs.carleton.ca/~morin/misc/sortalg/ se pueden encotrar muchos algoritmos de ordenación ademas de un curio applet Java que demustra visualmente como funcionan, y sirbe para comparar el rendimiento de los algoritmos.

Compartir: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • bodytext
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • BarraPunto
  • StumbleUpon
  • TwitThis
  • e-mail

WTF: Java 2.2.2

Y yo todavía usando Java 1.5…

java 2.2.2

Y algunos anunciando ya la 2.2.2… (pincha en la imagen)

Compartir: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • bodytext
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • BarraPunto
  • StumbleUpon
  • TwitThis
  • e-mail

Media RSS - PicLens - WordPress

En este post os voy a mostrar como he modificado mi PhotoBlog (WordPress y PhotoBlog Plugin, que os cotare en otra ocasión), añadiéndole soporte para Media RSS, para que se puedan ver todas las fotos de forma espectacular con PicLens.

Básicamente he creado un pequeño plugin que modifica el xml del RSS generado por WorPress para añadir el Namespaces xmlns:media=”http://search.yahoo.com/mrss/” para lo cual he usado la acción ‘rss2_ns‘ que permite añadir nuevos Namespaces, y luego he usado la acción ‘rss2_item‘ que permite añadir nuevos elementos xml a cada item.

Aqui teneis el codigo:

add_action('rss2_ns', 'rss2_ns');
function rss2_ns(){
	echo 'xmlns:media="http://search.yahoo.com/mrss"';
}
 
add_action('rss2_item', 'rss2_item');
function rss2_item(){
	global $post;
 
	//var_dump($post);
 
	if(preg_match('#<img[^>]*>#s',$post->post_content,$valores)){
		list($tag)=$valores;
		if(preg_match('#src=\"(.*?)\"#s', $tag, $valores)) list(,$url)=$valores;
		if(preg_match('#(\w+://[^/]*)?(.*)#', $url, $valores)) list(,$server,$img)=$valores;
		if(preg_match('#(.*)/(.*)#', $img, $valores)) list(,$path,$file)=$valores;
 
		echo "<media:thumbnail url='$server$path/thumb_$file'/>";
		echo "<media:content url='$url'/>";
	}
}

Las dos elementos que hay que añadir son :

  • <media:thumbnail url=’{URL de la miniatura}’/>
  • <media:content url=’{URL de la imagen}’/>

En mi codigo lo que hago es coger la primera imagen del Post, obtener la URL de la foto, y modificar esta URL para que sea la de la miniatura.

Compartir: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • bodytext
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • BarraPunto
  • StumbleUpon
  • TwitThis
  • e-mail

Apple Mighty Mouse. Un paso atras para la humanidad

Quizás el titulo es algo “esagerao”, pero es que soy andaluz.

El primer raton que tuve la oportunidad de usar fue el que venia con mi querido Amiga 500 (aqui una foto del susodicho), con sus dos botones y la típica bolita que hacia necesaria una alfombrilla para que funcionara bien, y cuando no lo hacia, solo había que darle la vuelta, abrir la trampilla, limpiar el mecanismo, y listo, quedaba como nuevo…

Ahora tengo un magnifico Mighty Mouse inalámbrico de Apple, con su Bluetooth, con sus cuatro botones (aunque hay gente que se cree que tiene solo uno), sus diodos laser para detectar el movimiento,  su color blanco impoluto, su manzanita mordida casi invisible, y su bola para hacer scroll… genial… hasta que se ensucia la bolita y deja de funcionar… y aquí es cuando se echa de menos una trampilla para limpiar esa bolita…

Después de buscar un rato como limpiar la maldita bolita encontré dos metodos:

  1. El oficial de Apple, con video y todo, que se basa en pasar un trapillo varias veces por la bolita. Este método esta bien al principio, pero luego deja de ser efectivo.
  2. El no oficial, que consiste que destripar el ratón (disección es el termino que usan los científicos), limpiar el mecanismo, y volver a cerrar al paciente con un poco de pegamento. ¿Que les hubiera costado poner un par tornillos?

Yo, al final, no he tenido mas remedio que aplicar el segundo método, menos mal que llevo desmontado y montado cosas desde que tengo uso de razón… El proceso ha sido mas sencillo de lo que me esperaba, y ya lo tengo como nuevo… 

Aqui os dejo un par de fotos del proceso…

Este es el paciente destripado:

Y aqui como estaba de sucio:

 

Compartir: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • bodytext
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • BarraPunto
  • StumbleUpon
  • TwitThis
  • e-mail

WordPress en varios idiomas (IV)

Ya solo nos queda filtra el contenido del post para dejar solo las partes del texto que están en el idioma solicitado.

Filtrando el contenido del post

Ya en el capitulo anterior hemos configurado el filtro “the_content” por lo que solo tenemos que añadir el código necesario para aplicar al texto una expresión regular que buscará las etiquetas que definen los idiomas y que serán pasadas a la función que realiza los cambios, para todo esto voy a usar la función “preg_replace_callback“.

$text=preg_replace_callback("|\[lang='(.*)'\](.*)\[/lang\]|","replace",$text);

La función ”replace” es invocada una vez por cada coincidencia, recibiendo como parámetro cada una de las coincidencias y los grupos detectados por el expresión regular, y tiene que devolver el texto por el que se reemplazaran la coincidencia. Por lo tanto, esta función es muy sencilla, si el idioma (grupo 1) es igual al idioma seleccionado devuelve el texto (grupo 2) y en caso contrario devuelve “vacío”. Aquí el código de la función:

function replace($matchs){
	global $lang;
	$res="";
	if($matchs[1]==$lang) $res=$matchs[2];
	return $res;
}

Y listo… ya esta… ya funciona…  lo podéis ver funcionando en la página de prueba junto con el código fuente completo.

Compartir: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • bodytext
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • BarraPunto
  • StumbleUpon
  • TwitThis
  • e-mail

WordPress en varios idiomas (III)

Para que los lectores puedan seleccionar el idioma que mas les interese, he decidido que voy a colocar una barra con las banderas de los idiomas disponibles antes del texto del Post.

Crear la Barra de Banderas.

Lo primero que tenemos que hacer es aplicar una expresión regular al contenido para extraer cuanto idiomas se están usando en las etiquetas “[lang= 'xx']”  para lo que usaremos las funciones “preg_match_all” y “array_unique“.

preg_match_all("/\[lang='(.*)'\]/",$text,$salida);
$idomas=array_unique($salida[1]);

Luego generaremos el código HTML necesario para poner las imágenes necesarias y los links con el parámetro ”lang=xx” del que ya hablamos en el primer capitulo. Cuando el idioma coincida con el que se esta usando, no pondremos el link.

$bar="
<div>";
foreach ($idomas as $i) {
    if($i!=$lang) $bar.="<a>";
    $bar.="<img src="/wp-content/plugins/ML/flags/{$i}.png" alt="" />";
    if($i!=$lang) $bar.="</a>";
}
$bar.="</div>
";
$text=$bar.$text;

Por lo que la función que filtra el contenido del Post quedaría así:

add_filter('the_content', 'filtro');
 
function filtro($text) {
	global $current_user, $wp_query , $post;
 
	$lang=$wp_query->query_vars['lang'];
	if(empty($lang)) $lang="es";
 
	preg_match_all("/\[lang='(.*)'\]/",$text,$salida);
	$idomas=array_unique($salida[1]);
 
	$bar="
<div>";
	foreach ($idomas as $i) {
		if($i!=$lang) $bar.="<a>";
		$bar.="<img src="/wp-content/plugins/ML/flags/{$i}.png" alt="" />";
		if($i!=$lang) $bar.="</a>";
	}
	$bar.="</div>
";
	$text=$bar.$text;
 
	return($text);
}

Continua en http://zxblog.laullon.com/2008/05/wordpress-en-varios-idiomas-iv/

Compartir: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • bodytext
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • BarraPunto
  • StumbleUpon
  • TwitThis
  • e-mail

WordPress en varios idiomas (II)

He decidido que voy a usar una etiqueta para indicar al plugin que partes del post tiene que mostrar para cada idioma, esta etiqueta tendra el siguiente formato:

[lang='es']texto que esta en español[/lang]
[lang='en']texto que esta en ingles[/lang]

 

Añadir botones en el editor de WordPress (TinyMCE)

Lo siguiente que voy a hacer es añadir un plugin al TinyMCE que trae WordPress para añadir las etiquetas necesarias para saber en que idioma están las diferentes partes del post.

Lo primero que hay que hacer es indicarle a WordPres que queremos añadir unos botones en la barra de herramientas del editor, para ello usamos el filtro “mce_buttons“, este filtro envía a la función un array al que hay que añadir el nombre de los botones que definiremos posteriormente en el plugin del editor

add_filter('mce_buttons', 'ML_mce_buttons');
 
function ML_mce_buttons($buttons) {
   array_push($buttons, "separator", "ML_en_bt", "ML_es_bt");
   return $buttons;
}

Lo siguiente es indicar a WordPress cual es fichero de JavaScript que define el plugin del editor, para ello usaremos el filtro “mce_external_plugins“, este filtro nos envía un mapa al que tenemos que añadir el nombre del plugin del editor y el fichero JavaScript en el que esta defenido.

add_filter("mce_external_plugins", "ML_mce_external_plugins");
 
function ML_mce_external_plugins($plugin_array) {
   $plugin_array['ML'] = '/wp-content/plugins/ML/ml.js';
   return $plugin_array;
}

Aquí os pongo el código completo del del fichero que define el plugin del editor, y a continuación lo explico línea a línea

(function() {
  tinymce.create('tinymce.plugins.ML', {
    init : function(ed, url) {
      ed.addCommand('ML_apply', function(ui, value) {
        ed.execCommand('mceReplaceContent', 0, "[lang='"+value+"']{$selection}[/lang]");
      });
      ed.addButton('ML_en_bt', {
        title : 'Ingles',
        image : url + '/flags/gb.png',
        cmd : 'ML_apply',
        value:'en'
      });
      ed.addButton('ML_es_bt', {
        title : 'Espa–ol',
        image : url + '/flags/es.png',
        cmd : 'ML_apply',
        value:'es'
      });
    },
    getInfo : function() {
      return {
        longname : 'ML Plugin',
        author : 'laullon',
        authorurl : 'http://wordpress.org',
        infourl : 'http://wordpress.org',
        version : '0'
      };
    }
  });
  tinymce.PluginManager.add('ML', tinymce.plugins.ML);
})();
  • Línea 2. Creamos el plugin.
  • Líneas 3-19. Funcion “init”, en esta función definimos todo lo necesario para el plugin.
    • Líneas 4-6. Añadimos la función que se ejecutara cuando se pulse en unos de los botones.
    • Líneas 7-12 y 13-18. Creamos los dos botones con los nombres definidos en el plugin de WordPress.
  • Línea 30. Añadimos el plugin al editor.

Aquí tenéis el resultado.
 

Mas info acerca los plugins de TinyMCE aquí: http://wiki.moxiecode.com/index.php/TinyMCE:API

Continua en: http://zxblog.laullon.com/2008/05/wordpress-en-varios-idiomas-iii/

Compartir: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • bodytext
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • BarraPunto
  • StumbleUpon
  • TwitThis
  • e-mail

WordPress en varios idiomas (I)

Durante los últimos días he estado probando algunos plugins para dotar a mi blog de capacidad para tener Post y Pages en varios idiomas, pero ninguno de los que he probado me ha terminado de convencer, así que me he decido a escribir mi propio plugin, y aquí os voy a contar como lo voy haciendo.

Para empezar tenemos que hacer es crear el fichero que contendrá todo el código del plugin, para ello lo mejor es seguir la documentación propia de WordPress.

Lo primero que voy a definir y programar es como indicarle al plugin que lenguaje tiene que usar a la hora de mostrar el post o la página.
En un primer momento pensé en indicarlo re-escribiendo las URL, por ejemplo, si la URL original era:

http://example.com/2008/08/titulo

para indicar que la queríamos en Ingles debería ser:

http://example.com/en/2008/08/titulo

Pero después de hacer algunas pruebas he descartado esta opción por que complicaba el desarrollo con re-direcciones, o por lo menos no he encontrado una forma sencilla de hacerlo.

Por lo tanto voy a usar un parámetro en la URL para indicar el lenguaje, por lo que la URL quedaría de esta forma:

http://example.com/2008/08/titulo?lang=en

 

Para usar este método lo primero que hay que hacer es indicarle a WordPress que tiene que recoger ese parámetro de la URL, para esto, usaremos un filtro llamado “query_vars“.

 

add_filter('query_vars', 'ML_query_vars');
 
function ML_query_vars($qvars){
	$qvars[] = 'lang';
	return($qvars);
}

Cuando WordPress invoca la función “ML_query_vars” asignada a este filtro nos pasa un Array con los parametros/variables que va extraer de la petición, lo único que tenemos que hacer es añadir la cadena “lang” a este array y devolver este array como resultado de la función.

Una vez hecho esto, solo tenemos acceder al objeto “wp_query” para obtener el valor de la variable “lang” cuando se necesite, por ejemplo, cuando se filtra el contenido del post. 

add_filter('the_content', 'filtro');
 
function filtro($text) {
	global $current_user, $wp_query;
	$lang= $wp_query->query_vars['lang'];
        return($text);
}

Continua en “Añadir botones en el editor de WordPress (TinyMCE)

Compartir: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • bodytext
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • BarraPunto
  • StumbleUpon
  • TwitThis
  • e-mail

Leopard Admin - WordPress como MAC OS X

leopard admin wordpress

Desde que se lanzo WordPress 2.5 parece que a la mayoría de los bloggers no les gusta la parte de administración. Gracias a esto están apareciendo numerosos plugin para cambiarlo.

A mi no es que me disguste, pero he decidido probar algunos de ellos, y he decidido quedarme con el “Leopard Admin” qe acaba de lanzar Teddy Hwang.

Este plugin le da un aspecto similar, como su nombre indica, a un Mac OS X Leopard, facilitando la navegación, que era lo que menos me gustaba.

Link: http://www.teddyhwang.com/resources/leopardadmin/

Compartir: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • bodytext
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • BarraPunto
  • StumbleUpon
  • TwitThis
  • e-mail