Transición de imagenes o slideshow con jQuery

Para un par de sitios (aún no los lanzamos así que una vez que lo hagamos lo agrego al post) necesitábamos que existiera una transición de imágenes con un fade, algo bien simple, por lo que me puse a buscar un buen plugin de jQuery, pero nada era lo suficientemente simple y limpio, por lo que buscando encontre un muy buen post para construir uno, lo tomé como base y lo arreglé un poco para poder configurar el tiempo entre transiciones, el tiempo que dure el difumado y no tener que agregar css, quedando así:

	jQuery.fn.simpleSlide = function(a){

		a				= a || {};
		a.duration		= a.duration || 5000;
		a.transition	= a.transition || 1000;

		var	c	= $(this);

		$(c).css("position","relative");

		$("img",$(c))
			.css({
				'position'	: 'absolute',
				'top'		: '0px',
				'left'		: '0px',
				'z-index'	: '8'
				})
			.find(":first")
				.addClass("slide-active")
				.css('z-index','10');

		setInterval(function(){

				var $active = $("img.slide-active",$(c));

				if($active.length == 0) $active = $("img:last",$(c));

				var $next	= $active.next().length ? $active.next() : $("img:first",$(c));

				$active
					.addClass("slide-last-active")
					.css('z-index','9');

				$next
					.css({opacity: 0.0})
					.addClass("slide-active")
					.css('z-index','10')
					.animate({opacity: 1.0}, a.transition, function(){
						$active
							.removeClass('slide-active slide-last-active')
							.css('z-index','8');
					});
			}, a.duration);

	}

¿Como funciona?

Simple, un contenedor (ej. un div) y dentro una lista de imágenes:

	<div id="contenedor">
		<img src="imagen_1.jpg" alt="Imagen 1" />
		<img src="imagen_2.jpg" alt="Imagen 2" />
		<img src="imagen_3.jpg" alt="Imagen 3" />
		<img src="imagen_4.jpg" alt="Imagen 4" />
		<img src="imagen_5.jpg" alt="Imagen 5" />
	</div>
[/htm]

y obviamente con jQuery previamente cargado

[html]
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>

para que se inicie la transición cuando cargue la página

	$(document).ready(function(){

		$("#contenedor").simpleSlide();

	});

si quieren configurar el tiempo en que demora en iniciar la nueva transición (duration) o el tiempo que dura el efecto (transition) deberían llamarlo así

	$(document).ready(function(){

		$("#contenedor").simpleSlide({duration:5000,transition:1000});

	});

Hoy asistí a Emprende 2009

Junto a Claudio Peñailillo, mi socio en OXUS y diDigital, asistimos hoy a Emprende 2009, que corresponde a la feria que organizan alumnos de Ingeniería Civil y Comercial de la Universidad Técnica Federico Santa María.

Una excelente experiencia, notable el vuelco que le dieron a esta feria orientada al Emprendimiento y la Innovación.

Me habría gustado poder apoyar más, pero todo fué contra el tiempo, en un día sacamos el sitio debido a problemas con el proveedor anterior y decidimos apoyarlos frente a este gran problema.

Fotos y la presentación la pueden ver en el Blog de OXUS, gracias Dinko por la oportunidad de participar.

Agregar paginación a Comentarios en Wordpress

Hace unos días me enteré por twitter que Charla Técnica, proyecto de mi amigo Norman Varas, tenía problemas en su migración desde Blogger a Wordpress, principalmente porque estaba usando un hosting compartido que no aguantaba el alto tráfico que tiene este sitio y además el problema de estar probando directamente sobre el sitio en producción plugins y cambios al mismo por lo que ahora ya además cuenta con un sitio de desarrollo que evitará generar problemas como en los días antes de la migración.

Por ahora está usando uno de mis servidores esperando la migración final a uno propio, aproveché de ayudarlo con algunas cosas, entre otros habilitando WP Super Cache, que ayudaría a bajar la carga que se lleva el servidor sobre todo en este fin de semana que jugó Chile contra Paraguay (2-0).

Pero uno de los grandes temas que le preocupaba a Norman era no tener paginación para los comentarios, que fácilmente sobrepasan los 500 en algunos artículos, por lo que me puse a buscar algún plugin que ayudara en esta tarea, probé varios, ninguno cumplía con lo requerido, algunos cambiaban la forma en que se mostraban inclusive los comentarios, por lo que opté por buscar una solución “a mano”, y me encontré con la grata sorpresa de que era más simple de lo que pensaba.

Es así como encontré la función paginate_comments_links de muy simple uso, bastaba ir dentro del template que están usando a comments.php y agregar esta función, en este caso sobre y bajo los post para facilitar el acceso a los usuarios.

<div class="navigation">
<span>Páginas:</span>
<?php paginate_comments_links(); ?>
</div>
<ol class="commentlist">
<?php wp_list_comments(); ?>
</ol>
<div class="navigation">
<span>Páginas:</span>
<?php paginate_comments_links(); ?>
</div>

y agregando un poco de estilo con css

.navigation{
clear:left;
margin:1em 0;
padding:1em;
height:21px;
}

.navigation span{
border:1px solid #FFFFFF;
display:block;
float:left;
margin-right:0.1em;
padding:0.2em 0.5em;
}

.navigation a{
border:1px solid #FFFFFF;
display:block;
float:left;
margin-right:0.1em;
padding:0.2em 0.5em;
}

.navigation .page-numbers{
border:1px solid #9AAFE5;
text-decoration:none;
}

.navigation a:hover{
background:#2E6AB1 none repeat scroll 0 0;
border:1px solid #2E6AB1;
color:#FFFFFF;
font-weight:bold;
}

.navigation .current{
background:#2E6AB1 none repeat scroll 0 0;
border:1px solid #2E6AB1;
color:#FFFFFF;
font-weight:bold;
}

.navigation .next{
font-weight:bold;
}

.navigation .prev{
font-weight:bold;
}
.navigation .dots{
border:0;
}

con esto obtenemos para un post de 9 páginas

Paginación Ejemplo 1

Pero el espacio útil para mostrar páginas es más ancho, entonces me puse a buscar como poder controlar para esta función la cantidad de páginas a mostrar, así fui a la función que utiliza paginate_comments_links para generar la paginación que es paginate_links, que tal como se explica en la documentación, puede ser útil para crear listado de páginas de cualquier área dependiendo de los argumentos que se le pasen a la función.

Para lograr controlar la cantidad de páginas debíamos definir dos variables, end_size y mid_size.

end_size, es la cantidad de páginas que se muestran antes o luego de los puntos suspensivos que se muestran cuando la cantidad de páginas antes y/o despues de la actual supera el valor definido en mid_size.

mid_size, que permite definir cuantas páginas van junto a la página actual, si definimos por ejemplo este valor en 4 antes de la página actual tendremos máximo 4 páginas y luego de la página actual un máximo de 4 páginas.

Como ejemplo cuando nos encontramos con 9 páginas si definimos end_size = 2 y mid_size = 4 veríamos lo siguiente al estar en la página 8:

Ejemplo Paginación 2

Al estar en la página 2:

Ejemplo Paginación 3

Para controlar esto hacemos la siguiente modificación en el código anterior y pueden cambiar los valores a su gusto.

<div class="navigation">
<span>Páginas:</span>
<?php
$pcl_args = array('end_size' => 2,'mid_size' => 4);
paginate_comments_links($pcl_args);
?>
</div>
<ol class="commentlist">
<?php wp_list_comments(); ?>
</ol>
<div class="navigation">
<span>Páginas:</span>
<?php paginate_comments_links($pcl_args); ?>
</div>

Como ejemplo en caso de confusión, si quiero que se muestren un máximo de 13 páginas siempre tendríamos según los ejemplos ya mostrados, end_size = 2 y mid_size = 4, esto nos lleva a una formula:

cantidad_de_paginas = ( end_size * 2 ) + ( mid_size * 2 ) + 1

Y obtendríamos para 15 páginas cuando estamos ubicados en la página 8 algo como esto:

Ejemplo Paginación 4

No se puede escribir en /tmp, Read-Only Filesystem, Linux y Cpanel

Empezamos a recibir el siguiente aviso automático desde Cpanel a uno de los correos de OXUS, de creo el único cliente que tenemos con ese sistema:

[hackcheck] Possible root compromise detected

Attempts to create new directories or files whose filenames begin with numbers have failed.
This is indicative of a root compromise of the server.

The exact error encountered was:

Failed to create directory /tmp/cpanel.TMP.jy_UrJFr1epCTN5v: Read-only file system

Comenzamos a revisar que pasaba y nos dimos cuenta que no solo Cpanel no podía escribir en el directorio /tmp luego verificamos que el sitio no funcionaba correctamente y nos encontramos con el siguiente error de MySQL:

Can’t create/write to file /tmp

Con PHP lo mismo, no podía escribir en /tmp por lo que no creaba sesiones y ni pensar en upload de archivos.

Continue reading ‘No se puede escribir en /tmp, Read-Only Filesystem, Linux y Cpanel’

Estos post resumen … live again

Ha pasado un buen tiempo y luego de estar profundamente atareado levantando el nuevo negocio de la Fibra Óptica Plástica (que continúo levantando y tiene para largo) ha vuelto mi motivación por seguir con mi Blog.

Me llevé una buena sorpresa con el artículo “Sesiones que funcionan en FireFox pero no en Internet Explorer” que tenía comentarios pendientes de aprobar desde el año pasado, pero ya estoy al día, esto me motiva a seguir hablando de problemas simples que a veces por poca información complican más de la cuenta.

En este tiempo viajé al IPTV World Forum en Rio de Janeiro, hace unas semanas volví de un viaje a Estados Unidos donde participé en la OFC/NFOEC (Conferencia mundial de Fibra Óptica) en San Diego, luego viajé a Los Angeles y finalmente extendí mi viaje para asistir a la Web 2.0 Expo por segundo año consecutivo, actuando de corresponsal de Webprendedor.

Hace poco apareció una entrevista que me hicieron en Builders.cl y estos días actualicé el sitio web de OXUS y este Blog.

Además encontré unos CD de respaldo viejos con sitios web de quizás cuando y fotos que pensé perdidas, hay buen material ahí para algunos post del recuerdo, de esto armé una página en facebook de JOYFUL, subí los MP3 del único disco grabado, fotos, el skin de winamp y un afiche de una tocata donde canté junto con el Coke Familia de A.N.I.M.A.L, excelentes recuerdos ! Espero encontrar el minidisc con esa grabación.