Las miniaturas de YouTube

JMiur [E]

Utilizar las miniaturas automáticas que provee YouTube es sencillo, hace poco, mostraba la forma de emplearlas para armar listas de videos sin necesidad de insertarlos lo que ayuda a reducir el tiempo de carga de las páginas.

Esas miniaturas son automáticas, basta saber el ID del video para generar la URL de las imágenes:

http://www.youtube.com/watch?v=jEOkxRLzBf0

Estas tres son miniaturas de 130x97 pixeles aproximadamente:

http://img.youtube.com/vi/jEOkxRLzBf0/1.jpg
http://img.youtube.com/vi/jEOkxRLzBf0/2.jpg
http://img.youtube.com/vi/jEOkxRLzBf0/3.jpg



No son las únicas. En nealgrosskopf.com nos muestran varias más.

La imagen por defecto es elegida por quien sube el video. Se corresponde con la miniatura 2.jpg pero tiene 120x90 pixeles, la encotramos en esta URL:

http://img.youtube.com/vi/jEOkxRLzBf0/default.jpg


Hay otra de mayor tamaño llamada 0.jpg que tiene 320x240 pixeles:

http://img.youtube.com/vi/jEOkxRLzBf0/0.jpg


Así como hay videos de alta definición, también hay imágenes de 130x97 de alta definicion, son hq1.jpg y hq3.jpg:

http://img.youtube.com/vi/jEOkxRLzBf0/hq1.jpg
http://img.youtube.com/vi/jEOkxRLzBf0/hq3.jpg


La imagen hq2.jpg es más grande, tiene 480x360 pixeles lo mismo que la imagen hqdefault.jpg que es la que tiene la mayor definición:

http://img.youtube.com/vi/jEOkxRLzBf0/hq2.jpg
http://img.youtube.com/vi/jEOkxRLzBf0/hqdefault.jpg


En todos los casos, nos basamos en el ID del video y usamos como base la URL:

http://img.youtube.com/vi/.......

aunque tmabién pue de usarse esta otra:

http://i.ytimg.com/vi/.......

Insertar Flash en el blog

Parece que incluir archivos de Flash siempre trae complicaciones. No es difícil pero nos lo hacen difícil porque cada servicio nos da instrucciones diferentes. Unos usan OBJECT, otros EMBED, otros ambas. Aparecen cosas misteriosas y crípticas como:

classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"

o:

codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0"

Suelen ser códigos que ocupan varias líneas y ¡vaya uno a saber que dicen!
<object width="600" height="300" type="application/x-shockwave-flash" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0"><param name="movie" value="http://.../achivo.swf" /><param name="quality" value="high" /><embed src="http://.../achivo.swf" quality="high" type="application/x-shockwave-flash" width="600" height="300"></embed></object>
Veamos el más común, el que nos da YouTube:
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/jkTNe85y0UI&hl=es&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/jkTNe85y0UI&hl=es&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>
¡Otra vez distinto!

Así que mejor colocarlos como están y listo pero claro, a veces no funcionan y entonces, más que asustarse, lo mejor es tratar de entenderlos y si lo conseguimos, nos daremos cuenta que ... no los necesitamos.

La etiqueta HTML para insertar archivos de Flash (SWFs, reproductores de audio, reproductores de video, etc) es OBJECT. Como toda etiqueta, se abre y se cierra:
<object .......>
.......
</object>
Dentro de ella, se colocan parámetros, datos extras que son necesarios o que son optativos:
<object .......>
<param name="NOMBRE" value="VALOR" />
</object>
Como PARAM es una etiqueta "sin contenido", no es necesario agregar la etiqueta de cierre </param> y es suficiente agregar la barra final en la misma etiqueta de apertura; es lo mismo que pasa con otras como <br /> <img ... /> <meta ... /> <input ... />

¿Y la etiqueta EMBED? La respuesta rápida es NO EXISTE diablo2 Es que en realidad, es un rezago del tiempo en que Microsoft y Netscape se mataban para crear funciones diferenciadas y cada uno inventaba algo que el otro copiaba pero con otro nombre. El resultado de esa guerra es la falta de estandarización y las incompatibilidades entre los navegadores. Si nos basamos en las recomendaciones de la w3org (y deberíamos hacerlo), EMBED es una etiqueta "prohibida" y, en este caso, no se trata de un capricho sino de simple comodidad ¿para qué escribir dos cosas si basta escribir una sola?

Es cierto que las diferencias entre navegadores hace que unos no interpreten lo mismo que los otros pero la etiqueta OBJECT contempla esa diferecencia así que es sencillo de resolver.
<object type="application/x-shockwave-flash" data="http://.../archivo" width="ANCHO" height="ALTO">
<param name="movie" value="http://.../archivo" />
</object>
Si tuviéramos que insertar un archivo de YouTube, bastarían esas tres líneas para que pudiéramos verlo:

type es un atributo obligatorio y le indica al navegador, cuál es el tipo de formato que debe incrustar
data es un atributo donde colocamos la URL del archivo a reproducir y ese dato es el que reemplaza a la etiqueta EMBED
width y height son el ancho y el alto del archivo (medido en pixeles) y son valores que podemos cambiar

En una etiqueta PARAM colocamos otra vez la URL del archivo a reproducir porque esa es la que leerá Internet Explorer.

Así que esto, mostraría un video de YouTube sin problemas; más corto, imposible:
<object width="425" height="350" type="application/x-shockwave-flash" data="http://www.youtube.com/v/jkTNe85y0UI"><param name="movie" value="http://www.youtube.com/v/jkTNe85y0UI" /></object>
Claro que hay más opciones, cada una de ellas se agrega en una etiqueta PARAM siempre con la misma sintaxis, colocando el nombre del atributo y su valor:

bgcolor establece el color de fondo (valor hexadecimal) si es que el SWF es transparente
wmode define al fondo como transparente (transparent) u opaco (opaque); también hay un valor extra llamado window
menu habilita (true) o deshabilita (false) el menú contextual sobre las películas
quality calidad de salida de la película (low, high, autolow, autohigh, best)
allowFullScreen habilita (true) o deshabilita (false) la posibilidad de ver a pantalla completa

Ejemplos:

<param name="bgcolor" value="#000000" />
<param name="wmode" value="transparent" />
<param name="menu" value="false" />
<param name="quality" value="high" />
<param name="allowFullScreen" value="false" />

La etiqueta OBJECT tiene otros atributos como ID, CLASS y ALIGN que son comunes a casi todas las etiquetas, y otros especiales:

classid identifica el control ActiveX y por lo tanto sólo se aplica a IE. Es un atributo innecesario, aún en Internet Explorer
codebase es la ubicación donde puede descargarse ese control ActiveX en caso que el navegador no disponga de él (en la etiqueta EMBED se usaba pluginspage)

Las etiquetas PARAM tienen opciones diversas (más información):

play indica si la película comienza a reproducirse de manera automática (true) o no (false)
loop indica si la película se repite de manera automática (true) o no (false)
scale especifica la forma en que se manejarán los tamaños (default, showall, noborder, exactfit)
base indica el directorio base para resolver paths relativos
flashvars contiene una serie de variables qie son pasadas al reproductor

Muchas veces, cuando el archivo de Flash contiene ciertas instrucciones, requiere que se le de permiso. Para eso, hay un parámetro específico llamado allowScriptAccess que, por defecto tiene un valor de sameDomain:
<param name="allowScriptAccess" value="sameDomain" />
Eso es lo que ocurre cuando se agregan menus realizados con Flash; no funcionan a menos que permitamos que se comuniquen. Los valores posibles son:

never impide el acceso a scripts de cualqueir tipo
always permite el acceso (es el valor por defecto en las viejas versiones)
sameDomain permite el acceso a scripts ubicados en el mismo dominio de la página

Así que en esos casos, debemos agregarle esto y todo funcionará:
<param name="allowScriptAccess" value="always" />

Coraje es ...

Coraje es invertir en la gente.descargar imagen original

Coraje es proteger la naturaleza.Coraje es considerar a los más pequeños.
Coraje es favorecer el transporte público.Coraje es comprender la diversidad.

Cambiar el widget de Archivos por un Calendario

En una de las últimas entradas de BloggerSPhera nos muestran la forma de modificar la forma en que vemos el elemento Archivos de Blogger, reemplazando las listas por un calendario.

Aunque no lo he implementado acá, en este blog de pruebas se lo puede ver funcionando y quedará algo así:


Lo que veremos será un control para seleccionar el mes, un calendario donde estarán resaltados los días donde existan entradas en ese mes, una barra de navegación para avanzar y retroceder mes a mes y debajo, una lista con los enlaces a las entradas correspondientes. Tanto con el selector como con los enlaces de navegación, podremos desplazarnos a lo largo de las listas de archivos, sin cambiar de página.

Para aplicarlo, lo primero es descargar el script correspondiente que está en este archivo ZIP , ya traducido al español. Aunque no es necesario modificarlo para que funcione, podría editarse y cambiarse algunos detalles como los textos que se muestran por defecto.

Podemos agregarlo de dos maneras, lo alojamos en un servidor o bien copiamos y pegamos el contenido dentro de estas etiquetas, justo antes de </head>:
<script type='text/javascript'>
//<![CDATA[
// aquí pegamos el contenido del archivo
//]]>
</script>
Inmediatamente después, agregamos la llamada a la función con esto:
<script chartset='utf-8' src='/feeds/posts/summary?max-results=0&amp;alt=json-in-script&amp;callback=timezoneSet'/>
Ahora, con los artilugios expandidos, vamos a buscar el widget de Archivos:
<b:widget id='BlogArchive1' locked='false' title='XXXXXXX' type='BlogArchive'>
.......
</b:widget>
Eliminaremos todo lo que está entre la apertura y el cierre de la etiqueta y lo reemplazaremos. Terminará quedando esto:
<b:widget id='BlogArchive1' locked='false' title='NOMBRE' type='BlogArchive'> 
<b:includable id='toggle' var='interval'> <!-- Toggle not needed for Calendar --> </b:includable>
<b:includable id='interval' var='intervalData'> </b:includable>
<b:includable id='flat' var='data'>
<div id='bloggerCalendarList'>
<ul>
<b:loop values='data:data' var='i'>
<li class='archivedate'>
<a expr:href='data:i.url'><data:i.name/></a> (<data:i.post-count/>)
</li>
</b:loop>
</ul>
</div>
<div id='blogger_calendar' style='display:none'>
<table id='bcalendar'><caption id='bcaption'></caption>
<thead id='bcHead'/>
<tbody><tr><td id='cell1'> </td><td id='cell2'> </td><td id='cell3'> </td><td id='cell4'> </td><td id='cell5'> </td><td id='cell6'> </td><td id='cell7'> </td></tr>
<tr><td id='cell8'> </td><td id='cell9'> </td><td id='cell10'> </td><td id='cell11'> </td><td id='cell12'> </td><td id='cell13'> </td><td id='cell14'> </td></tr>
<tr><td id='cell15'> </td><td id='cell16'> </td><td id='cell17'> </td><td id='cell18'> </td><td id='cell19'> </td><td id='cell20'> </td><td id='cell21'> </td></tr>
<tr><td id='cell22'> </td><td id='cell23'> </td><td id='cell24'> </td><td id='cell25'> </td><td id='cell26'> </td><td id='cell27'> </td><td id='cell28'> </td></tr>
<tr><td id='cell29'> </td><td id='cell30'> </td><td id='cell31'> </td><td id='cell32'> </td><td id='cell33'> </td><td id='cell34'> </td><td id='cell35'> </td></tr>
<tr id='lastRow'><td id='cell36'> </td><td id='cell37'> </td></tr></tbody>
</table>
<table id='bcNavigation'><tr><td id='bcFootPrev'/><td id='bcFootAll'/><td id='bcFootNext'/></tr></table>
<div id='calLoadingStatus' style='display:none; text-align:center;'>
<script type='text/javascript'>bcLoadStatus();</script>
</div>
<div id='calendarDisplay'/>
</div>
<script type='text/javascript'> initCal();</script>
</b:includable>
<b:includable id='menu' var='data'> </b:includable>
<b:includable id='posts' var='posts'> <!-- posts not needed for Calendar --> </b:includable>
<b:includable id='main'>
<b:if cond='data:title'>
<h2><data:title/></h2>
</b:if>
<div class='widget-content'>
<div id='ArchiveList'>
<div expr:id='data:widget.instanceId + &quot;_ArchiveList&quot;'>
<b:if cond='data:style == &quot;HIERARCHY&quot;'>
<b:include data='data' name='interval'/>
</b:if>
<b:if cond='data:style == &quot;FLAT&quot;'>
<b:include data='data' name='flat'/>
</b:if>
<b:if cond='data:style == &quot;MENU&quot;'>
<b:include data='data' name='menu'/>
</b:if>
</div>
</div>
</div>
</b:includable>
</b:widget>
Guardamos y para que esto funcione, deberemos verificar que la configuración del widget sea correcta y esté seleccionada Lista:

Estilo Lista Menú desplegable

Sólo nos faltaría establecer las propiedades CSS para el calendario, eso lo hacemos agregando el estilo antes de </b:skin>:
#blogger_calendar { /* es el bloque donde lo mostraremos */
margin:0 auto; /* centrado */
width: 190px; /* el ancho */
}

#bcaption { /* el rectángulo superior con los meses */
height:20px;
text-align:right;
}
#bcaption select { /* este es el selector de los meses */
background-color: #345;
border: 1px solid #567;
color: #DDD;
font-family:Tahoma;
font-size:11px;
padding: 0 0 0 10px;
width:100px
}

table#bcalendar thead tr th { /* cada una de las celdas con los nombres de los dias de la semana */
background: #345;
border: 1px solid #567;
color: #EEE;
font-family: Tahoma;
font-size: 11px;
font-weight: bold;
padding: 2px;
text-align: center;
width: 20px;
}

table#bcalendar tbody tr td { /* cada celda con el número del dia */
background: #567;
border: 1px solid #789;
color: #ABC;
text-align: center;
padding: 2px;
-moz-border-radius: 2px;
}

td.highlightCell { /* las celdas donde hay entradas */
background-color: #9AB !important;
}
table#bcalendar tbody tr td a { /* el enlace de esas celdas */
color: #000;
font-weight: bold;
}

td.firstCell { /* las celdas vacias del inicio */
visibility: hidden; /* podemos hacerlas visibles usando visible */
}
td.emptyCell { /* las celdas vacias del final */
visibility: hidden;  /* podemos hacerlas visibles usando visible */
}
td.filledCell {background: #FFF;} /* el color de esas celdas vacias si es que están visibles */

table#bcNavigation { /* es la barra de navegación inferior */
color: #DDD;
background-color: #123;
border: 1px solid #234;
font-family:Tahoma;
font-size:10px;
margin: 5px 0 0 0;
padding: 0 ;
text-align:center;
width:190px;
}
table#bcNavigation a {color: #ABC;} /* el color del texto */
td#bcFootPrev {float: left; width: 10px;} /* el enlace hacia atrás */
td#bcFootNext {float: right; width: 10px;} /* el enlace hacia adelante */
#calendarDisplay{ /* debajo se muestra la lista de entradas */
}

/* esta es la lista inferior donde se muestran las entradas del mes */
ul#calendarUl { }
ul#calendarUl li { }
ul#calendarUl li a { /* cada item de la lista es un enlace */
color: #9AB;
display: block;
font-size:11px;
padding-left:30px;
}

REFERENCIAS:BloggerSPhera

Internet Archive: Videos clásicos

Así como podemos usar la WaybackMachine para ver lo que era la web en tiempos tan remotos como hace tan solo un par de años y recorrer blogs pero en sus versiones de junio del 2007 o sitios famosos como YouTube en el 2005, esa no es la única de las posibilidades que tiene el sitio de Internet Archive. También posee un buscador de libros y documentos de textos, otro especializado en software legal con subsecciones como open-source o videogames y otro de audios que van desde audio-libros hasta viejas transmisiones radiales.

Y como si fuera poco, también hay una sección de imágenes, películas y videos, una librería con varios miles de clásicos subidos por los usuarios y muchos de ellos posibles de ser descargados por cualquiera: Animation & Cartoons, Arts & Music, Computers & Technology, Cultural & Academic Films, News & Public Affairs, Non-English Videos, Open Source Movies, Vlogs.

No es sencillo encontrar algo porque abruma la cantidad pero es un sitio a tener muy en cuenta.

Wallpapers (IPhone 2)

Click en la imagen para previsualizar un modelo reducido.
Descargar el archivo ZIP que contiene las imágenes

REFERENCIAS:extraverage.net

¿Qué es un referrer?

Eso de los códigos misteriosos hizo que alguien preguntar ¿qué es document.referrer?

En JavaScript hay un "objeto" llamado document que es una referencia a la página que estamos viendo; con eso, podemos modificarla:
document.write("HOLA");
u obtener alguna información como por ejemplo:

document.bgColor es el color de fondo [click]
document.domain es el dominio del servidor [click]
document.location la URL [click]
document.title el titulo de la página [click]
document.referrer es la página de la que viene el usuario [click]

Así que, consultando el dato de document.referrer sabremos si se ha ingresado desde otro blog, desde algún enlace externo o si llegó desde un buscador en cuyo caso también nos dirá qué estaba buscando.

Es fácil comprobarlo, si agregáramos un elemento HTML a nuestro blog y allí pusiéramos esto:
<script type="text/JavaScript">document.write(document.referrer)</script>
estaríamos mostrándo a quien ingresa, desde donde viene o nada si es que es un ingreso directo.

¿Para que sirve saber eso? Muchos lo utilizan para mostrar determinado contenido en función del acceso; por ejemplo, es común que ciertos sitios coloquen publicidad cuando se ingresa a través de buscadores pero no lo hagan si se ingresa de otro modo, es una forma de privilegiar a los usuarios habituales. Del mismo modo hay decenas de ejemplos en la web que juegan con ese dato.

En netmechanic.com proponen algunos métodos sencillos, por ejemplo, un mensaje de bienvenida:
<script type="text/JavaScript">
if (document.referrer != '') {
alert('Gracias por visitarnos desde '+document.referrer);
}
</script>
Claro que esto así puesto daría como resultado cosas un poco extrañas :)

Otra forma de usarlo es para dirigir a los visitantes a otra página
<script type="text/JavaScript">
if (document.referrer = 'http://deDondeVienen") {
location.href = "http://aDondeRedirigimos";
}
</script>
No es muy agradable hacer eso, en todo caso, es mejor mostrar un pop-up:
<script type="text/JavaScript">
function newWindow(newContent) {
if (document.referrer = 'http://deDondeVienen") {
winContent = window.open(newContent, 'nextWin', 'right=0,top=20,width=350,height=350,toolbar=no,scrollbars=no,resizable=no')
}
}
newWindow('URL_contenido')"
</script>
En webtaller.com hay más opciones, una de ellas es más razonable ya que filtra los resultados:
<script type='text/JavaScript'>
//<![CDATA[
// creamos una lista de direcciones web que nos interese detectar, cualquiera sea
var procedenciaValida = new Array(
'http://www.google',
'http://bing.com',
'http://twitter.com'
);
// creamos una lista de mensajes para cada una de esas direcciones
var mensajeValido = new Array(
'Llegó utilizando el buscador de Google',
'Llegó utilizando el nuevo buscador de Microsoft',
'Hizo click en un enlace de Twitter'
);
// verificamos si el visitante llega desde alguna de ellas
var ok = false;
var elMensaje = 0;
for(i in procedenciaValida) {
if(document.referrer.indexOf(procedenciaValida[i]) > -1) {
ok = true; // si es así será true
cual = i;
}
}
// y si es así, hacemos algo
if(ok) {
document.write(mensajeValido[cual]);
}
//]]>
</script>
Ese "algo" a hacer puede ser cualquier cosa, un texto, una imagen, una ventana, un elemento oculto, sólo hay que usar la imaginación.

Un buscador completo


Google sabe todo, hasta donde dejamos esas cosa que siempre se pierden ...

Personalizar la Barra de Videos de Google

Entre los gadgets que se incluyen en Blogger hay uno llamado Barra de Videos. Es sencillo de usar, hacemos click y nos muestra una serie de opciones; podemos ponerle un título, seleccionar si queremos mostrar los videos más vistos de YouTube o los más valorados o los más recientes. También podemos elegir mostrar canales de usuarios o videos relacionados con ciertas palabras clave.


El resultado, será una barra vertical, nada configurable ya que el códiog que veremos en la plantilla poco dice.


Pero ese no es el único modo. El mismo gadget está disponible en Google AJAX Search API y allí, las alternativas son otras e incluso, con paciencia podríamos configurlarla modificando determinadas cosas.

La primera gran diferencia es que podemos elegir otro modelo y en lugar de ser vertical, ubicarla de manera horizontal. En el wizard, vamos seleccionando opciones y previsualizando el resultado. Por ejemplo, si sólo queremos mostrar nuestro canal, bastará escribir el nombre y desmarcar todo lo demás. Si quisiéramos mostrar varios canales de usuarios, deberíamos ponerlos separados por comas. Una vez que lo tenemos configurado, le pedimos que nos muestre el código a insertar.

<!-- ++Begin Video Bar Wizard Generated Code++ -->
<!--
// Created with a Google AJAX Search Wizard
// http://code.google.com/apis/ajaxsearch/wizards.html
-->

<!--
// The Following div element will end up holding the actual videobar.
// You can place this anywhere on your page.
-->
<div id="videoBar-bar">
<span style="color:#676767;font-size:11px;margin:10px;padding:4px;">Loading...</span>
</div>

<!-- Ajax Search Api and Stylesheet
// Note: If you are already using the AJAX Search API, then do not include it
// or its stylesheet again
-->
<script src="http://www.google.com/uds/api?file=uds.js&v=1.0&source=uds-vbw"
type="text/javascript"></script>
<style type="text/css">
@import url("http://www.google.com/uds/css/gsearch.css");
</style>

<!-- Video Bar Code and Stylesheet -->
<script type="text/javascript">
window._uds_vbw_donotrepair = true;
</script>
<script src="http://www.google.com/uds/solutions/videobar/gsvideobar.js?mode=new"
type="text/javascript"></script>
<style type="text/css">
@import url("http://www.google.com/uds/solutions/videobar/gsvideobar.css");
</style>

<style type="text/css">
.playerInnerBox_gsvb .player_gsvb {
width : 320px;
height : 260px;
}
</style>
<script type="text/javascript">
function LoadVideoBar() {

var videoBar;
var options = {
largeResultSet : !true,
horizontal : true,
autoExecuteList : {
cycleTime : GSvideoBar.CYCLE_TIME_MEDIUM,
cycleMode : GSvideoBar.CYCLE_MODE_LINEAR,
executeList : ["ytchannel:nombre"]
}
}

videoBar = new GSvideoBar(document.getElementById("videoBar-bar"),
GSvideoBar.PLAYER_ROOT_FLOATING,
options);
}
// arrange for this function to be called during body.onload
// event processing
GSearch.setOnLoadCallback(LoadVideoBar);
</script>
<!-- ++End Video Bar Wizard Generated Code++ -->

Así como está, la podríamos agregar en un elemento HTML y listo pero vamos a ver si podemos modificarle un poco; para eso, hay una página de ayuda del mismo Google donde se enumeran algunas alternativas.

Esta es la idea:
<!-- aquí colocaremos los estilos CSS personales -->
<style type='text/css'
/* ... ver detalles ... */
</style>

<!-- este es el contenedor donde se mostrará la barra -->
<div id="videoBar-bar"> <span>Cargando ...</span> </div>

<!-- aquí se carga el API de búsqueda de Google, si ya lo estamos usando no es necesario incluirlo otra vez -->
<!-- el CSS de ese API no es necesario en absoluto así que no lo incluyo -->
<script src="http://www.google.com/uds/api?file=uds.js&v=1.0&source=uds-vbw" type="text/javascript"></script>

<!-- aquí se cargan los scripts del API -->
<script type="text/javascript"> window._uds_vbw_donotrepair = true; </script>
<script src="http://www.google.com/uds/solutions/videobar/gsvideobar.js?mode=new" type="text/javascript"></script>
<!-- aquí se cargaría el estilo gsvideobar.css pero prefiero agregarlo por separado así que lo ignoro -->

<!-- la función que ejecuta el script -->
<script type="text/javascript">
function LoadVideoBar() {
var videoBar;
var options = {
largeResultSet : !true, horizontal : true, autoExecuteList : {
cycleTime : GSvideoBar.CYCLE_TIME_MEDIUM,
cycleMode : GSvideoBar.CYCLE_MODE_LINEAR,
executeList : ["ytchannel:NOMBRE"] }
}
videoBar = new GSvideoBar(document.getElementById("videoBar-bar"), GSvideoBar.PLAYER_ROOT_FLOATING, options);
}
// esta función se cargará al terminar la carga del blog
GSearch.setOnLoadCallback(LoadVideoBar);
</script>
videoBar-bar es un DIV donde se mostrará la barra una vez cargada y puede tener cualquier otro nombre.

Para indicar qué cosas queremos mostrar usamos la línea que dice executeList : [], allí, podemos colocar un canal:
executeList : ["ytchannel:NOMBRE"]
o varios canales:
executeList : ["ytchannel:unNOMBRE","ytchannel:otroNOMBRE"]
o usar palabras claves:
"ytfeed:most_viewed.this_week" es la opción Most Viewed Videos
"ytfeed:top_rated.this_week" es la opción Top Rated Videos
"ytfeed:google_news" es la opción Top News Videos
"ytfeed:recently_featured" es la opción Recently Featured Videos
y todos son combinables, así que podemos usar varios, sólo hay que separarlos con comas.

Lo mismo hacemos si queremos agregar expresiones de búsqueda, basta colocarlas entre comillas:
executeList : ["ytchannel:NOMBRE",,"beatles"]

Como dije, el CSS por defecto se carga si incluimos gsvideobar.css pero, prefiero no hacerlo y agregarlo a mano para personalizarlo:
/* el rectángulo donde mostraremos la barra de videos */
#videoBar-bar {margin: 0 auto; width: 425px;}
#videoBar-bar span {color: #BB0000; font-size: 11px;}

/* los colores de los enlaces y los textos */
.playerBox_gsvb div.alldone_gsvb, .playerBox_gsvb a.title_gsvb {color:#DEF;}
.playerBox_gsvb div.alldone_gsvb:hover, .playerBox_gsvb a.title_gsvb:hover {color:#FFF;}

/* cada una de las miniaturas */
.resultsBox_gsvb div.resultDiv_gsvb {border-color: #789; margin-left: 2px;}

/* la ventana modal donde se muestran los videos */
.floatingPlayerBox_gsvb, .floatingPlayerBox_gsvb * {background-color: #345;}
.floatingPlayerBox_gsvb {border: 1px solid #567; -moz-border-radius: 10px;}
.floatingPlayer_gsvb {background-color: #123; -moz-border-radius: 5px;}
.floatingPlayerBox_gsvb {opacity: 0.8; position: absolute; z-index: 9998;}
.floatingPlayer_gsvb {position: absolute; z-index: 9999;}
.floatingBranding_gsvb {position: absolute;}

/* contrl de esa ventana con el reproductor */
.playerBox_gsvb {display:block; margin: 5px 10px 5px 10px; text-align: center;}
.idle_gsvb {display: none;}
.playing_gsvb {display: block;}

/* es el reproductor en si mismo */
/* small: 180x135, medium: 260x195, large player: 320x260, extra large: 480x380 */
.playerInnerBox_gsvb .player_gsvb {height: 260px; width: 320px;}
.playerInnerBox_gsvb div.player_gsvb {margin: auto;}
.floatingPlayer_gsvb .playerInnerBox_gsvb div.player_gsvb {margin: 0;}
.playerBox_gsvb div.alldone_gsvb {cursor: pointer; display: inline; font-size: 11px;}
.playerBox_gsvb div.title_gsvb {font-size: 11px; margin-top: 2px; text-align: center;}

/* la tabla donde se muestran las cuatro miniaturas */
.full_gsvb {display: block;}
.empty_gsvb {display: none;}
table.resultTable_gsvb {border-collapse: collapse;}
table.resultTable_gsvb td {border: none;}
div.resultDiv_gsvb {background-color: #000; border: 1px solid; height: 79px; text-align: center; width: 104px;}
div.smallResultDiv_gsvb {height: 41px; text-align: center; width: 54px;}
div.resultDiv_gsvb img {cursor: pointer; display: inline;}

/* Auto Execute List Status Box (no sé qué es) */
div.statusBox_gsvb {padding: 4px;}
div.statusItem_gsvb {color: #DEF; cursor: pointer; display: inline; font-weight: bold; margin-right: 6px; white-space: nowrap;}
div.statusItemSelected_gsvb {color: #000; text-decoration: none;}

/* y le quitamos el logo :$ */
.gsc-branding{display: none;}
Y este sería el resultado del experimento:


Cargando ...

FilesTube: Usar lo que la web provee

FilesTube no tiene nada que ver con YouTube, sólo es un buscador de todo tipo de archivos con características particulares como la posibilidad de usar esos archivos en nuestras páginas. No aloja archivos, sólo los busca y nos dice donde están y de dónde podemos descargarlos.

Aunque podemos usarlo libremente, al registrarnos gratuitamente accedemos a algunas de las funciones como historial, crear listas de reproducción de audio o video y la posibilidad de incrustar reproductores.


El proceso es sencillo y está explicado en esta página. Como los MP3s a reproducir se encuentran en "alguna parte" de la web, pueden "desaparecer" pero las listas son editables así que podemos cambiarlas cuantas veces se nos ocurra.

Una nueva etiqueta de Blogger: isFirstPost

Otra vez es Ariane quien ha descubierto un nuevo código en las plantillas de Blogger pero, esta vez, parece funcionar. En Blogger'SPphera algo nos dicen aunque todavía no hay ningún ejemplo concreto de cómo usarlo y habrá que esperar un poco. Así, a asimple vista, parece interesante.

Si uno carga una plantilla nueva, buscando en <b:includable id='main' var='top'> se encontrará con esto:
<b:if cond='data:post.includeAd'>
<b:if cond='data:post.isFirstPost'>
<data:defaultAdEnd/>
<b:else/>
<data:adEnd/>
</b:if>
<data:adCode/>
<data:adStart/>
</b:if>
La etiqueta <b:if cond='data:post.isFirstPost'> es una condición que detecta si lo que se muestra es el primer post o no lo es. Por lo que vi, no detecta si es el último post publicado sino si es el primero de una página, incluso en las páginas de navegación.

Está colocado allí como parte de los códigos de Adsense así que imagino que su utilidad es esa, resaltar algún tipo de publicidad pero, la condición sigue siendo válida así que podría usarse en otras partes como <b:includable id='post' var='post'> y diferenciar el post superior de una lista de los que se muestran debajo, por ejemplo, mostarlo completo y el resto resumido.
<b:if cond='data:post.isFirstPost'>
... aquí iría el código de un post completo ...
<b:else/>
... aquí iría el código para un post resumido ...
</b:if>
Poca información, lo sé. Blogger no explica nada pero demos gracias a que gente como Ariane y Roseli nos van mostrando estos detalles y nos alientan a experimentar un poco.

Una lista numerada fuera de lo común

Sexy Ordered Lists with CSS, es decir listas numeradas pero .. sexy ¿Por qué sexy? Vaya uno a saber, seguramente, porque es más llamativo que llamarlas lista con fondos sonrisa

De todas maneras, es una buena idea.

¿Qué es una lista ordenada? Una etiqueta HTML que muestra eso, una lista con una serie de items y de manera automática se coloca delante un número de orden (ver Las listas en HTML 1 y 2):
  1. el primer item
  2. el segundo item
  3. el tercer item
<ol>
<li>el primer item</li>
<li>el segundo item</li>
<li>el tercer item</li>
</ol>
El truco sexy consiste en colocar dentro de cada item, dos datos separados, un encabezado y un párrafo y de esa manera, tenemos varios elementos que podemos personalizar de manera independiente:
<ol class="steps">
<li class="first">
<h2>encabezado 1</h2>
<p>párrafo 1</p>
</li>
<li>
<h2>encabezado 2</h2>
<p>párrafo 2</p>
</li>
<li class="last">
<h2>encabezado 1</h2>
<p>párrafo 1</p>
</li>
</ol>
Y claro, la clave está en cuáles son las propiedades CSS a aplicarle a cada sector; por ejemplo:
<style type='text/css'>
ol.steps {
/* la imagen de fondo de los números */
background: transparent url(http://img198.imageshack.us/img198/9223/ulsexy.gif) repeat-y scroll 0 0;
border: 1px solid #111;
margin: 20px 0;
padding: 0 0 0 40px; /* la alineación horizontal de los números */
}
ol.steps li {
background:#222 none repeat scroll 0 0;
/* el efecto resaltado del los bordes de cada item */
border-top: 1px solid #000;
border-right: 1px solid #333;
border-bottom: 1px solid #353535;
border-left: 1px solid #151515;
/* la fuente de los números */
color: #DEF;
font-family: 'Century Gothic';
font-size: 25px;
margin: 0;
padding: 15px;
}
ol.steps li h5 { /* la fuente de los títulos */
border-bottom: 1px dashed #333;
color: #BCD;
font-family: 'Century Gothic';
font-size: 22px;
font-weight: normal;
padding: 0 0 5px 0;
}
ol.steps li p { /* la fuente de los textos */
color: #AAA;
font-family: Tahoma;
font-size: 14px;
font-weight: normal;
line-height: 1.2em;
}
ol.steps li.first { /* el borde superior opatativo */
border-top: 1px solid #333;
}
ol.steps li.last { /* el borde inferior optativo */
border-bottom: none;
}
</style>
Daría como resultado algo así:

  1. Curabitur mattis nibh

    Vestibulum sapien dolor, viverra bibendum accumsan condimentum, fermentum id sem. Duis vel sapien id dui vestibulum aliquet ut ut libero. Pellentesque eget libero odio. Ut lacus tortor, auctor eget commodo ut, commodo eu nisi. Donec eleifend dapibus justo ut auctor! Donec risus quam, eleifend id suscipit consectetur, iaculis a purus. Morbi magna mauris, ultricies ac consequat ac, lobortis non enim. Curabitur in purus est! Pellentesque aliquam; velit consectetur feugiat ornare, tortor lectus tincidunt leo, in blandit tellus velit vel quam. Mauris eleifend enim quis lectus fringilla consequat. Maecenas arcu est, tincidunt et varius sed, faucibus ut diam. Sed elementum mollis bibendum.

  2. Quis dolor interdum lobortis

    Morbi volutpat ipsum sit amet enim iaculis condimentum. Suspendisse mattis neque a enim molestie dignissim. Nulla turpis diam, euismod bibendum laoreet sed, vulputate ac sapien. Sed dignissim nibh hendrerit lacus accumsan vestibulum? Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur at hendrerit arcu. Aenean convallis nisl nec nisi feugiat tempor. Phasellus interdum mollis eros; ut rhoncus arcu feugiat ac. Vivamus posuere suscipit risus, sed bibendum massa lacinia non. Mauris dapibus eros quis risus dictum consectetur non ac libero. Quisque tincidunt nunc ac metus posuere varius? Sed cursus tincidunt mauris, a vestibulum ante rhoncus eget! Nullam sodales sagittis tincidunt. Duis dapibus lacinia venenatis. Donec tincidunt nisl nisl? Donec viverra consequat est, eget metus.

  3. Proin sem nibh

    In nulla orci, imperdiet sed viverra ac, vulputate sed magna. Vestibulum viverra ullamcorper venenatis? Proin ac aliquet purus. Suspendisse at ligula sed dui lacinia feugiat. Proin lectus est, ultricies eget hendrerit a, molestie vitae arcu! Suspendisse rhoncus, metus id rhoncus iaculis, nisi lacus egestas sem, et feugiat eros arcu in nisl? Ut consequat interdum enim, eget dapibus ligula ultricies at. Donec consequat luctus neque. Maecenas ac magna a quam porttitor ullamcorper semper eu metus. Proin vel dui ipsum, laoreet dapibus massa! Sed interdum rutrum porta. Nam nisl ante, ultricies accumsan aliquam vitae, lacinia id sem! Aliquam erat volutpat. Nulla facilisi.

Agregar el buscador de Bing al blog

Para utilizar el buscador de Bing en nuestro sitio, sólo debemos agregar un elemento HTML donde se nos ocurra y allí copiar y pegar el siguiente código:
<!-- Web search from Bing-->
<form method="get" action="http://www.Bing.com/results.aspx" target="_blank">
<input type="hidden" name="cp" value="1252"/>
<input type="hidden" name="FORM" value="FREEWS"/>
<table bgcolor="#FFFFFF">
<tr>
<td>
<a href="http://www.Bing.com/"><img src="http://www.bing.com/siteowner/s/siteowner/Logo_Small_51x19.gif" border="0" alt="Bing"/></a>
</td>
<td>
<input type="text" name="q" size="30" />
<input type="submit" value="Search Web"/>
</td>
</tr>
</table>
</form>
<!-- Web Search from Bing -->
Lo resaltado es opcional o configurable. Al igual que cualquier otro formulario, los detalle gráficos son modificable (más información 1 | 2).

Bing

Es un buscador standard así que muestra resultados generales; un modelo más sofisticado se puede conseguir ingresando a Bing Advanced Search Box.

En el primer paso deberemos definirnos por una de las tres alternativas posibles:

Site search: busca en uno o varios sitios (hasta 10 diferentes)
Search Macro: utiliza buscadores especializados como sitios de referencia, MSDN, etc (más información)
Web search: busca en toda internet

Vamos usar la primera y allí agregamos un nombre y la URL de nuestro sitio. Con el botón Try your search box, podemos verificar el resultado y luego Next.

El segundo paso nos permite configurar el buscador. Elegimos el lenguaje, el ancho (322 pixeles por defecto), el tamaño de la ventana donde se mostrarán los resultados (600x400 por defecto) y un color básico para el tema gráfico a usar. Next nos lleva al último paso donde los dan el código HTML a utilizar.

Como usa una ventana de tipo modal, para evitar que ciertos controles u objetos (por ejemplo videos) queden por encima, aconsejan cambiar esta línea:
"appearance":{
"autoHideTopControl":true,
"width":600,
"height":400
},
El código comienza con una etiqueta META:
<meta content='1.1, en-US' name='Search.WLSearchBox'/>
Yo driría que esa debería copiarse en el encabezado de la plantilla aunque no sé, todo muy lindo pero no he logrado que funcionara en Blogger verguenza

El aniversario del rey

Faltan casi dos meses pero aún así el blog oficial de Google habla del próximo cumpleaños de Blogger y sus diez años de vida.

23 de agosto de 1999 - 23 de agosto de 2010

El hecho que, cada minuto se publiquen 270.000 palabras y que se creen nuevos blogs constantemente es lo que aún lo mantiene en la cima de los servicios de este tipo, con una posición dominante, casi duplicando el número de visitas de su inmediato competidor. Tal como titulan en baluart.net, aún sigue siendo el rey aunque claro, los usuarios seguimos esperando que sea una especie de Luis XVI y que no se demore mucho la revolución francesa que lo transforme en algo un poco menos autoritario risaanim


Imagino que deben anticiparse tanto no sólo para que compartamos nuestras anécdotas sino para que lo agendemos y les enviemos regalitos.

Ahora mismo estoy pensando: ¿Qué podría regalarle a Blogger?

El tunel del tiempo

The Travel Film Archive es un canal de YouTube que se especializa en documentales de distintas partes del mundo. Lo interesante es que muchos de ellos fueron filmados hace muchos pero muchos años lo que nos permite ver cómo era el mundo cuando todo era blanco y negro.




Wallpapers (primeros planos)

Wallpapers (primeros planos)

¿Cómo se comunican los ordenadores?

¿Cómo se comunican los ordenadores? o La impresora caprichosa


REFERENCIAS:Colores nevados

Optimizar el blog para que nos encuentren

"Cuando se sienta frente a su equipo informático y realiza una búsqueda en Google, obtiene de forma prácticamente instantánea una lista de resultados de la Web. ¿Qué sistemas utiliza Google para encontrar páginas web que coincidan con su consulta y para determinar el orden de los resultados de búsqueda?"

Así comienza una página de ayuda de las Herramientas para Desarrolladores de Google y tal vez, pueda servir como introducción para responder una pregunta que me formulan una y otra vez: ¿Cómo hacer que mi sitio sea conocido? Y si digo introducción es porque hasta ahí podemos llegar, es lo que podemos "controlar" y el resto, como en cualquier orden de la vida, dependerá de miles de casualidades.

Que nuestro sitio aparezca en los buscadores es lo elemental ¿En que posición de los resultados? En la mejor posible, de eso, se encargan las técnicas SEO y la Divina Providencia.

¿Por qué es importante? Porque la fuente de tráfico principal de un sitio son los motores de búsqueda:
  1. Google 74%
  2. Directo 16%
  3. Referral 7%
  4. Otros 3%
Claro que visitas y lectores no es lo mismo. Si analizan las estadísticas notarán que si bien la mayor cantidad de visitas es la que poviene de los buscadores, también es la más volatil, la que menos páginas mira y la que dura menos. Es lógico y hay que tener muy en claro lo que nos interesa ya que el "exito" es una definición muy subjetiva que no depende de números.

Sea como sea, los buscadores son "la vidriera" que nos permite tener cierta presencia, sin ellos, las cosas se harían muy complicadas. Entonces, el punto elemental es ¿conocen los buscaores la existencia del sitio? ¿pueden encontrarlo? ¿cómo lo hacen? Es lo que llaman Rastreo. Los buscadores recorren la web y mediane el uso de ciertos programas (robots, arañas, spiders, como quieran llamarse) leen, toman nota de lo que encuentran y lo añaden a sus índices. Cada vez que encuentran un enlace dentro de un sitio, lo guardan para ampliar la búsqueda y visitarlo luego. En teoría, salvo en una red cerrada, partiendo de una sola página, podrían llegar a recorrer toda la web.

Esto quiere decir que esos robots nos visitan cada cierto tiempo ¿cuántas veces? ¿lo hacen regularmente con todos los sitios? No, en realidad, visitan más seguido ciertos sitios que otros, sobre todo, si se dan cuenta que son sitios que se modifican con cierta asiduidad o que tienen cierta relevancia ¿Si tengo Adsense o alguna publicidad similar, Google lo tendra en cuenta? La respuesta es NO, sería un soborno y en principio, los buscadores son independientes.

El segundo punto es la Indexación, es decir, la forma en que se guarda y ordenar la información del rastreo. Es el punto clave y hay que tener claro que lo único que leen los buscadores es texto. Aunque últimamente han ampliado esa posibilidad, deberíamos basarnos en esa premisa, todo lo que no es texto es ignorado y eso significa que el contenido es lo único relevante, que los scripts son ignorados y que las etiquetas que usamos son muy importantes. Parámetros como title y alt en las imágenes, el uso adecuado de los encabezados (h1 h2 h3 h4 h5 h6) que no son sólo un tamaño de letra. El título de las entradas, la descripción del sitio. Todo es importante pero, como cualquier otra cosa que hagamos, siempre hay detalles que pueden mejorarse y ninguno genera resultados mágicos.

¿Y cómo hacer que un sitio tenga una buena posición en las páginas de resultados? ¿Qué significa esto? Es obvio que si alguien hace una búsqueda de algo, y recibe cincuenta páginas con "respuestas", es mejor estar entre las primera que entre las últimas. Esa posición es lo que llaman relevancia, es decir, de alguna manera, las páginas se analizan y se ordenan "de mayor a menor".

Google dice que esas relevancia se determina a partir de más de 200 factores pero sólo uno de ellos es el PageRank. Sabemos, por experiencia propia que a veces, esos resultados suelen ser raros. Escribes un artículo original y el primero que aparece es una referencia a ese artículo publicado en otro sitio. Pasa seguido, muy poco podemos hacer al respecto y aunque garantizan que siempre trabajan para perfeccionar la detección de la página con el contenido original, da la impresión que aún tienen mucho camino que recorrer.

En la práctica, los pasos para dar a conocer nuestro sitio a los buscadores son sencillos:
  • enviar el sitio a Google http://www.google.es/addurl.html o en Blogger, marcar la opción SI en ¿Deseas añadir tu blog a nuestras listas? y ¿Deseas permitir que los motores de búsqueda encuentren tu blog?
  • enviar un sitemap que ayudará a reconocer la estructura del sitio
Las recomendaciones sobre el diseño y el contenido también ayudan:
  • usar enlaces de texto claros y lo más simple posibles
  • evitar la sobreabundancia de enlaces internos y privilegiar sólo los que se consideran relevantes
  • si una página contiene más de cien enlaces deberia dividirse en varias
  • el contenido debe tener información útil
  • pensar qué palabras podría introducir un usuario para localizar esas páginas e incluir esas palabras en el sitio
  • utilizar texto en lugar de imágenes para mostrar nombres, contenido o enlaces importantes
  • eliminar los enlaces obsoletos
  • corregir el código HTML incorrecto
  • saber que, en principio, JavaScript, frames, DHTML y Flash no son indexados
Las imágenes que usamos no sólo son decorativas, pueden ser un elemento muy importante así que se recomienda utilizar nombres de archivo informativos y detallados, nada de nombres crípticos. Por ejemplo:

IMG00023.jpg no es un buen nombre
gatito.jpg es más adecuado
gatito-jugando-playa.jpg es casi ideal sobre todo si le agregamos alt a la etiqueta:
<img src="gatito-jugando-playa.JPG" alt="gatito jugando en la playa de Ipanema" />
Como todo, esto debe hacerse sin abusar porque el uso excesivo de palabras clave se considera una infracción que es penada.

"La página en la que se encuentra una imagen y el contenido que la rodea (incluidos los títulos y los pies de foto) ofrecen a los motores de búsqueda una información importante sobre el tema de la imagen. Por ejemplo, si incluye una fotografía de un oso polar en una página sobre cultivo de tomates de cosecha propia, estará transmitiendo un mensaje confuso a los motores de búsqueda sobre el tema del archivo osopolar.jpg."

Por útimo, las recomendaciones sobre calidad tienen algunos puntos que vale la pena pensar:
  • cree páginas para los usuarios, no para los motores de búsqueda
  • no engañe a los usuarios de su sitio ni muestre a los motores de búsqueda un contenido distinto del que ofrece a los usuarios
  • no participe en esquemas de enlaces destinados a mejorar la posición de su sitio o a manipular los resultados del algoritmo PageRank en su favor
  • evite los enlaces a spam o "sitios indeseables"
  • no utilice técnicas de redireccionamiento engañoso
  • no cree varias páginas, subdominios o dominios que presenten básicamente contenido duplicado
  • no cree páginas de comportamiento malicioso, como páginas de suplantación de identidad (phishing) o páginas que instalen virus, troyanos u otro tipo de software malicioso
  • proporcione contenido único y relevante que ofrezca a los usuarios una razón para visitar el sitio

REFERENCIAS:Optimización de motores de búsqueda: Mejor posición para su sitio en las búsquedas

Los sitemaps de Blogger y sus errores

Hace unos días, me preguntaban en un comentario respecto a un error que habían advertido en los sitemaps de Blogger enviados a través de las Herramientas para Desarrolladores de Google. Verifiqué los mios y no vi problemas, respondí entonces que lo mejor era reenviarlos porque se trata de feeds así que tal vez, un pequeño error provoca esas advertencias; no es algo fuera de lo común y normalmente, no tiene mayor trascendencia.

Un par de dias después, es Alejandro quien tiene la misma inquietud, los sitemaps muestran una advertencia y además, indican que las URLs indexadas en cada uno de ellos es 22 y no las aproximadamente 500 que son las indicadas:
atom.xml?redirect=false&start-index=1&max-results=500
Vuelvo a fijarme y, efectivamente, la advertencia existe en algunos de ellos:

Código XML no válido en la Etiqueta principal: author
No se ha reconocido esta etiqueta. Soluciónelo y vuelva a enviar la información.

Como en principio, sólo es una advertencia y por lo tanto no debería tener importancia ni podemos corregir el error, el proceso normal es reenviarlo o esperar. Eso hice y por lo general, la respuesta es rápida pero en este caso no, todos los reenviados permanecieron como pendientes durante varios dias; los otros no tenían problemas; de todas maneras de 2500 páginas indexadas, ahora se mostraban 1500. No es poca cosa.

Tal como lo dice el post de SpamLoco , intentamos varias combinaciones cambiando parámetros a ver si alguno funcionaba. Incluso lo hice en un blog de pruebas y el resultado era siempre el mismo: nada.

Hoy ya veo que lo que me muestra es que todos los sitemaps indican error y todos reconocen sólo 24 páginas así que la cantidad de URLs indexadas ha pasado a ser 120. Mucha diferencia diablo1


Click para ampliar.

Las respuestas de Google son curiosas. Hay muchas quejas y ambiguedades. Comenzaron minimizando el problema y terminaron reconociéndolo pero, curiosamente, dicen que "no afecta la indexación" y se limitan a contarnos que trabajan en algún metodo para "ocultar" el error, es decir, no corregirlo, taparlo ya que todos sabemos que lo que no se ve, no existe diablo2

Es cierto, la advertencia en si misma sólo es una molestia aunque no debería haber errores, sobre todo porque estamos hablando de la misma empresa que imagino yo, coordina los cambios para no afectar a los usuarios. Sin embargo, nada dicen de esa baja en la cantidad de páginas indexadas. Peor aún, en una respuesta, un empleado dice que no vale la pena enviar sitemaps en Blogger porque el sistema se encarga de hacerlo:

"If your site is hosted on Blogger, you don't need to submit a Sitemap file at all. This is all done automatically for you, so you can either ignore those errors or just remove the Sitemap file from your Webmaster Tools account."

Gracioso porque cualquier blog creado en Blogger y que tenga los feeds habilitados se integra de manera automática a las Herramientas de Google e incluye un sitemap.


Click para ampliar.

Moraleja: sólo resta esperar a menos que a alguien se le ocurra una solución milagrosa.

REFERENCIAS:SpamLoco

Click para ver el video

Esto no es un video sino una imagen GIF diablo2

Insertar MP3s con facilidad

Cualquier tipo de código HTML puede ser escrito utilizando JavaScript. Esta posibilidad es muy útil cuando se trata de códigos repetidos o engorrosos como lo son los reproductores de video o de audio que, por lo general, son siempre iguales ý sólo cambia un dato, el archivo a reproducir.

Así como era posible crear un script para insertar videos de YouTube con una instrucción sencilla, también podemos hacerlo con un reproductor de audio como el DewPlayer.

¿Qué necesitamos? Alojar el reproductor (un archivo SWF) en un servidor, por ejemplo en una cuenta de ImageShack y agregar este código en nuestra plantilla, antes de </head>:
<script type='text/javascript'>
//<![CDATA[
function escribir_MP3(archivo) {
var output = "<object type=\"application/x-shockwave-flash\" data=\"URL_dewplayermulti.swf?mp3=" + archivo + "\" height=\"20\" width=\"240\">";
output += "<param name=\"movie\" value=\"URL_dewplayermulti.swf?mp3=" + archivo + "\"></object>";
document.write (output);
}
//]]>
</script>
Donde debemos reemplazar URL_dewplayermulti.swf por la dirección URL de nuestro archivo.

¿Cómo lo usamos? Escribiendo una llamada al script donde quisiéramos que se mostrara:

<script type='text/javascript'>escribir_MP3("URL_archivo");</script>
Cada vez que lo usamos, simplemente cambiamos el dato del archivo de audio a reproducir y para probarlo, ya que estamos, aprovechamos la entrada de Gem@ y usamos XooImage para alojar algunos archivos MP3s.



Ilusiones opticas

Click para ver


¿Son iguales?

REFERENCIAS:Nerd Modo

Las miniaturas de Blogger

Cuando subimos una imagen a Blogger, el proceso es sencillo pero a veces, desconcertante, sobre todo si queremos hacer alguna clase de modificación en la imagen o se nos ocurre intentar algo distinto de las cosas que ya están predefinidas. De todas las cosas extrañas, el tamaño de la imagen subida es la que más confusión crea ya que sólo hay tres alternativas:

Tamaño de la imagen:
Pequeñas
Medio
Grandes

¿Que significan esas opciones? Así, en abstracto, parecerían no significar nada porque algo es grande o chico si tenemos otra cosa con que compararlo y aquí, no hay nada. Tampoco significa que si la imagen es "grande" debamos usar esa opción y si es "pequeña" la otra; en realidad, mientras la imagen no pese mas de 8MB, da lo mismo si elegimos una opción u otra, la imagen original se guardará tal y como es, aunque no nos demos cuenta.

Al subir una imagen, Blogger crea una serie de miniaturas de manera automática y son esas las que normalmente usamos; al definir Pequeñas/Medio/Grandes estamos decidiendo cuál de esas miniaturas vamos a usar y eso es lo que nos muestra el código HTML.

Supongamos que yo tengo una imagen que mide 617x423 pixeles, la subo a y elijo Medio y Centrar; el código generado dirá algo así:
<a href="http:// ....... /s1600-h/miImagen.jpg"> 
<img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 219px;" src="http:// ....... /s320/miImagen.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_XXXXXXXXXX" />
</a>
Lo primero que tenemos que saber es que lo único que nos interesa es la etiqueta IMG, el enlace no importa. Allí, en esa etiqueta hay dos datos claves en el parámetro style:

width: 320px; height: 219px;

es decir, la imagen, se mostrará de ese tamaño, de 320x219, no es la imagen subida, es una miniatura; usando Grande, pasaría algo similar, sólo cambiarían los valores, el valor de width diría 400px y si usara la opción Pequeña diría 200px.

Ah, bueno, entonces, para ver la imagen real deberé cambiar ese valor y poner width:617px ... no; eso no funcionará, veremos la imagen de ese tamaño pero no será la original, seguirá siendo la misma pero redimensionada y por lo tanto, se verá mal (pixelada): Ver/Ocultar un ejemplo [+]

El problema es que sin importar la parte de style, la URL de la imagen es la miniatura y eso está indicado por el directorio donde está guardada; es lo que vemos justo antes del nombre:

htp://......./s320/miImagen.jpg"

Ese dato define la miniatura a usar:

dirá s200 si elegimos Pequeña
dirá s320 si elegimos Medio
dirá s400 si elegimos Grande

Sólo cambiar ese dato tampoco servirá de nada porque style seguirá influyendo, veremos las distintas miniaturas, todas redimensionadas así que tendrán el mismo tamaño. Ver/Ocultar el ejemplo [+]



Si cambiamos la miniatura también debemos cambiar las propiedades width y height o eliminarlas. Ver/Ocultar el ejemplo [+]

Es importante entender que lo que hace Blogger es limitar el tamaño pero no necesariamente el ancho, eso depende de la imagen, si es apaisada (más ancha que alta) el tamaño máximo lo define width pero si no lo es (es más alta que ancha), el máximo lo define height. Por ejemplo, al insertar una imagen de 533x800 se generará este código:
<img 
style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 213px; height: 320px;"
src="http:// ....... /s320/miImagen.jpg"
border="0"
alt=""id="BLOGGER_PHOTO_ID_XXXXXXXXXX" />
Las miniaturas generadas por las opciones por defecto tendrán un tamaño máximo en alguno de sus sentidos (ancho o alto) pero ¿dónde está la imagen original? ¿podemos usarla? Si nuestro blog está en un dominio de blogspot.com, podemos usarla con facilidad, si está en un dominio propio, no porque hay restricciones que limitan su uso.

Como el resto de las miniaturas, la imagen original se encuentra en un directorio especial o mejor dicho, en varios: s00, s000 o s1600. Todos ellos contienen la imagen real, la que nosotros hemos subido y pueden usarse con el mismo criterio anterior, eliminando width y height del style y cambiando el directorio:

http:// ....... /s00/miImagen.jpg

Esta es la imagen original de 617x423 y esta otra la de 533x800.

El hecho que Blogger cree esas miniaturas es útil ya que con una sola imagen, tenemos cuatro variantes a nuestra disposición ¿No habrá más? Pués la verdad si y ahí las cosas se vuelven interesantes.

Subo otra imagen, esta vez de 596x596. No importa el método porque lo único que voy a usar es la URL de la etiqueta IMG así que ya dispongo de cuatro:

http: ....... /s00/demoIMGs_01.jpg la original de 596x596
http: ....... /s200/demoIMGs_01.jpg una miniatura de 200x200
http: ....... /s320/demoIMGs_01.jpg una miniatura de 320x300
http: ....... /s400/demoIMGs_01.jpg una miniatura de 400x400

Pero si juego un poco y pruebo otros directorios, me encuentro con que todos estos también funcionan y para verlos, uso una imagen mayor, la de 533x800:

s220 mostrará la imagen como miniatura de 220x220
s640 mostrará la imagen como miniatura de 426x640
s720 mostrará la imagen como miniatura de 480x720
s800 mostrará la imagen como miniatura de 533x800 que es la original

Pero también es interesante que nos muestra miniaturas mucho más chicas lo que es útil para generar galerías:

s32 son miniaturas de 32 pixeles
s48 son miniaturas de 48 pixeles
s64 son miniaturas de 64 pixeles
s128 son miniaturas de 128 pixeles
s150 son miniaturas de 150 pixeles

Y Plethoras comenta que ha encontrado más así que seguimos ampliando la lista de posibilidades:

s72 | s94 | s104 | s110 | s144 | s160 | s288 | s512 | s576 | s912 | s1024 | s1152 | s1280 | s1440

s32s48s64s128s150s00
596x596
501x750
450x609
533x800
617x423

Tooltips con efecto fade

Fading JavaScript Tooltips es un pequeño script que permite crear esos pequeños cuadros de textos informativos que se ven cuando colocamos el puntero del ratón sobre un enlace (tooltips). Su característica principal es que es muy lviana y no depende de otras librerías así que puede usarse en cualquier página web.

Una vez que descargamos el ZIP veremos una serie de archivos incluyendo el demo. De todos ellos, el único necesario es script.js que podemos alojar en un servidor o bien agregarlo de manera directa en la plantilla con una única condición, DEBE estar al final de nuestra página así que lo colocamos antes de </body>:
<script type='text/javascript' src='URL_script.js'></script>
o bien:
<script type='text/javascript'>
//<![CDATA[
aqui copiamos y pegamos el contenido del archivo
//]]>
</script>
¿Cómo lo vamos a usar? Indicando los textos que queremos que sirvan como "lanzadores" mediante etiquetas SPAN:
<span class="hotspot" onmouseover="tooltip.show('lo que queremos mostrar');" onmouseout="tooltip.hide();"> un texto </span>
Es decir, colocamos en tooltip.show() una cadena de texto de cualquier tipo que, puede incluir código HTML aunque para esto, deberemos cambiar los caracteres prohibidos:

en lugar de < escribimos &lt;
en lugar de > escribimos &gt;

por ejemplo:
<span class="hotspot" onmouseover="tooltip.show('Blablabla &lt;b&gt;negrita&lt;/b&gt; blablaba');" onmouseout="tooltip.hide();"> un texto </span>
y no sólo es texto lo que puede colocarse, también s posible usar una imagen; por ejemplo:
<span class="hotspot" onmouseover="tooltip.show('&lt;img src=\'URL_imagen\'/&gt;');" onmouseout="tooltip.hide();"> un texto </span>
Para este tipo de cosas, donde el HTML a colocar es complejo, sólo debemos prestar atención a las comillas e indicarle al navegador que ciertos caracteres deben tomarse de manera literal, para eso, les anteponemos una barra invertida:
'&lt;img src=\'URL_imagen\'/&gt;'
Las comillas de incio y fin son parte del código y las internas son literales.

Lo que faltaría agregar es el CSS que es fundamental para que esto funcione. Lo agregamos antes de </b:skin>. Aunque hay un archivo llamado style.css en el demo que puede usarse de base, podemos cambiarlo. Por ejemplo, en el demo, se usan tres imágenes para darle forma redondeada al tooltip (tt_left.gif, tt_top.gif, tt_bottom.gif) si quieren usarse, deben ser alojadas en algún sitio y cambiar las URLs.

En estos ejemplos no estoy usando imágenes así que el estilo se reduce a dos definiciones:
.hotspot { /* es el texto que sirve de lanzador */
color: #94D5FD;
cursor: pointer;
font-weight: bold;
font-family: tahoma;
font-size: 13px;
}

#tt { /* es el contenido del tooltip y el único obligatorio */
background: CornflowerBlue;
color: #FFF;
display: block;
font-family: Arial;
font-size: 16px;
padding: 5px 10px;
position: absolute;
-moz-border-radius: 10px;
}

/* los otros tres bloques son opativos y tiene sentido usarlos sólo si le colocamos un fondo con imágenes */
#tttop { /* la parte superior */ }
#ttcont { /* la parte central */ }
#ttbot { /* la parte inferior */ }

Ut tincidunt nisi quis elit dignissim mattis. Phasellus sit amet nunc eu est scelerisque tincidunt sit amet vitae sem. Sed ut nisi lorem. Vivamus ut felis libero. Vivamus venenatis justo ante. Nunc elementum interdum dolor, sit amet condimentum diam fermentum ac. Sed dictum condimentum arcu, id ornare turpis accumsan eu. Praesent ultricies egestas nulla at consectetur. Nunc sed est nulla, sit amet aliquam purus. Nam semper lacinia egestas. Nunc dictum lobortis arcu at bibendum?

Donec commodo nulla et magna malesuada a euismod metus aliquam. In hac habitasse platea dictumst. Vivamus mattis, nisi ac commodo cursus, metus justo eleifend sem, non auctor nisi felis eu tellus. Duis convallis condimentum elit, quis ullamcorper odio commodo ac. Aliquam ornare commodo fermentum. Aenean ut diam sed.

Aquí hay dos ejemplos más que cambian las propiedades de #tt, en uno, se usa una imagen de fondo eb lugar de un color plano y en la otra se establece el color de fondo como transparente.

Sebastian's Voodoo

A fines de mayo terminó el quinto concurso de cortos y animaciones organizado por la National Film Board de Canada y Cannes Short Film Corner; un festival auspiciado por YouTube.

El ganador fue Sebastian's Voodoo, de Joaquin Baldwin, un animador de Paraguay que vive y estudia en Los Angeles, USA


Los otros videos finalistas fueron:

Countdown de Jordan Canning (Canadá) click para ver el video
The black hole de Diamond Dugs (Reino Unido) click para ver el video
Reach de Luke Randall (Australia), una joyita que merece verse por separado

Wallpapers (patterns)

Wallpapers (patterns)

Otro de esos códigos misteriosos

Otro de esos códigos misteriosos que Blogger agrega y no dice nada. Tampoco parece funcionar o aún no está habilitado. Lo encontramos en las nuevas plantillas y en algunas otras ya se ha agregado solito dendro de esta parte:
<b:includable id='main' var='top'>
Parece referirse a alguna clase de buscador y utiliza JavaScript para detectar de dónde llegan los visitantes:
<b:if cond='data:isReSearchEnabled'>
<script src='http://www.google.com/jsapi' type='text/javascript'/>
<data:reSearchJs/>
<script type='text/javascript'>
google.load(&#39;search&#39;, &#39;1&#39;);
function reSearchInit() {
var blogSearcher = new google.search.BlogSearch();
var blogHomepageUrl = &#39;<data:blogHomepageUrl/>&#39;;
var adCodeUri = &#39;<data:reSearchAdCodeUri/>&#39;;
var referrer = document.referrer;
var reSearch = new BLOG_ReSearch(blogSearcher,
blogHomepageUrl,
adCodeUri,
referrer);
reSearch.run();
};
google.setOnLoadCallback(reSearchInit);
</script>
</b:if>
¿Será mucho pedir que alguien explique de manera oficial de que se tratan todas estas cosas que se agregan a nuestro blog?

Twitsig: Mostrar tweets como una imagen

¿Quieren poner Twitter en el blog pero los códigos les producen urticaria? Twitsig viene al rescate porque basta colocar el nombre de un usuario para generar una imagen dinámica que mostrará el último de los tweets, actualizándose con cierta regularidad.

Nos darán la URL de esa imagen que podemos agregar en cualquier parte, por ejemplo, como firma en distintos foros:

http://twitsig.com/vagabundia.jpg


También podemos generar la imagen de un tweet específico

http://twitsig.com/static/2114391108.jpg


Para darle cierta dimesión, hay que agregar -ANCHOxALTO inmediatamente después del nombre; por ejemplo:

http://twitsig.com/vagabundia-250x60.jpg

Sorry I'm late


Operación Anulada en Internet Explorer

Hace ya un tiempo, en El escaparate de Rosa se nos advertía sobre algunos problemas para mostrar blogs de Blogger en Internet Explorer.

No se trataba de un error común y corriente sino de esos errores graves que impiden acceder a una página:


Tampoco parecía haberse extendido, ocurría en algunos sitios y claro, siendo un error tan serio, era lógico suponer que se solucionaría rápidamente, fue reconocido por Blogger el 21 de mayo ... cinco días después seguía sin resolverse y estaba identificado como un error en el gadget de Seguidores. Aconsejaban removerlo o ubicarlo "más abajo" en la sidebar.

Decían: "actualizaremos esta entrada cuando el bug se haya solucionado". Los días pasaron e increiblemente, el problema sigue existiendo y se extiende.

El error Operación Anulada es grave. Microsoft dice que la manera más sencilla de solucionarlo es actualizar a la version 8 pero no es el caso porque ocurre tanto en IE7 como en IE8 y especialmente, en este último.

Son dos las causas que lo provocan, como bien dicen, la primera es el gadget de Seguidores así que lo más sencillo, si es que nos afecta, es quitarlo y probar. Es lo más simple porque eliminarlo no afectará los datos y al volverlo a insertar, se recuperan. Lamentablemente, esto no parece funcionar en el 100% de los casos. Yo no lo tengo incluido y ayer me vi afectado por el error. La segunda solución que nos dan es eliminar el formulario de comentarios incrustado. Efectivamente, esto soluciona todo ya que el problema afecta sólo a las páginas individuales.

El código que genera ese formulario en las plantillas nuevas (y en algunas no tan nuevas) es muy distinto del código original. Es uno de los tantos códigos misteriosos que van apareciendo cada tanto y sobre los que nadie nos informa para qué sirven o qué hacen. Si expandimos los artilugios y buscamos esto:
<b:includable id='comment-form' var='post'>
que es donde está el IFRAME del formulario, podríamos encontrarnos con algo así:
<iframe allowtransparency='true' class='blogger-iframe-colorize blogger-comment-from-post' expr:src='data:post.commentFormIframeSrc' frameborder='0' id='comment-editor' name='comment-editor' scrolling='no'/>
<data:post.friendConnectJs/>
<data:post.cmtfpIframe/>
<script type='text/javascript'>
BLOG_CMT_createIframe(&#39;<data:post.appRpcRelayPath/>&#39;, &#39;<data:post.communityId/>&#39;);
</script>
Nadie sabe qué significa pero es obvio que, aunque no usemos el gadget de Seguidores, se agrega un script que alguna relación tiene con ese sistema, probablemente, para integrarlo con los comentarios, vaya uno a saber.

Como el bug está en ese servicio, la solución es quitar ese código y colocar el código original, esperando que Blogger no lo cambie.

Moraleja, eliminamos eso en color y lo reemplazamos por esto:
<data:post.iframeColorizer/>
El problema se resuelve y todo vuelve a la anormal normalidad.

Herramientas de análisis y estadísticas

Las herramientas de análisis de nuestro sitio son útilies mientras no las transformemos en una compulsión. Las más simples sólo son contadores de visitas, las más complejas aportan información relevante que puede ser útil para optimizar nuestros sitio.

Ninguna de ellas soluciona nada, sólo son herramientas y, tal como sucede con cualquier otra estadísitica, interpretar sus datos es una tarea personal que requiere sentido común.

Cuando comenzamos un blog, lo normal es que las usemos todas juntas. Es casi inevitable. Supongo que esperamos que alguna de ellas nos de un dato diferente, un número que esté más acorde con nuestras expectativas. Luego de un tiempo, si tenemos suerte, nos curamos de esa manía y las cosas vuelven a su cauce natural.

En lo personal, creo que un blog que se inicia ni siquiera debería agregar estadísiticas para evitar la tentación de mirarlas risaanim

De todas maneras, esta es una lista publicada por instantShift con muchas herramientas para analizar el tráfico de un sitio web:


  1. Google Analytics: es el servicio gratuito más conocido, uno de los más detallados y complejos.
  2. Woopra: estadísticas en tiempo real. Posee un soft con el que es posible acceder a los datos desde el escritorio. Hay que registrarse y esperar que el sitio sea aceptado.
  3. Yahoo! Web Analytics: similar a Google Analytics, una herramienta de análisis muy completa; vale la pena verla.
  4. StatCounter: otro de los servicios más difundidos con limitaciones en su versión gratuita.
  5. SiteMeter: sencillo de usar, posee algunas funciones bastante atractivas pero los datos que brinda están limitados.
  6. Clicky: cuando lo probé (hace mucho tiempo) me pareció algo confuso.
  7. W3counter: un servicio gratuito excelente, fácil de agregar a cualquier web.
  8. Histats: limitado en cuanto a datos pero funciona bien.



Agregando videitos paso a paso

Como ya son varias las veces que me prguntan la forma en que están colocado los videos en la sidebar en Infinitos Mundos, voy a ver si puedo explicarlo; no es que sea difícil de hacer sino que hay ciertos datos dependen de donde se va a colocar, especialmente del ancho y el margen.


En realidad, como la idea es dividir un bloque en partes iguales, puede aplicarse a cualquier otra cosa pero, tratándose de videos, lo primero que necesitamos es algún script que los abra en una ventana modal; cualquiera de ellas es lo mismo y como uso LightWindow, voy a basarme en esa.

Pero empecemos con las imágenes para no complicar las cosas. Necesitamos las imágenes de los videos, miniaturas que podemos hacer nosotros mismos o si se trata de videos de YouTube, usar las que ellos mismos nos proveen. Por ejemplo, queremos poner estos cuatro videos:

http://www.youtube.com/watch?v=Ur4KW83CviQ
http://www.youtube.com/watch?v=jkTNe85y0UI
http://www.youtube.com/watch?v=0k2pYlcxogU
http://www.youtube.com/watch?v=mw1_BQpHSpo

Lo único que varía entre ellos es el ID, un conjunto de once caracteres que identifican cada video y que es un dato único e irrepetible.

Cuando los agregamos, antes de ser ejecutados, vemos que nos muestra una imagen estática. Esa imagen es accesible porque siempre está en el mismo lugar. Y no solo hay una, hay tres por cada video:

http://img.youtube.com/vi/jEOkxRLzBf0/1.jpg
http://img.youtube.com/vi/jEOkxRLzBf0/2.jpg
http://img.youtube.com/vi/jEOkxRLzBf0/3.jpg

Como ya tenemos todos los datos, vamos a agregar un elemento HTM en la sidebar y allí, colocaremos el código:
<div id="minivideos">
<a class="lightwindow" href="http://www.youtube.com/v/Ur4KW83CviQ" params="lightwindow_width=425,lightwindow_height=350,lightwindow_loading_animation=true" title="" rel="">
<img src="http://img.youtube.com/vi/Ur4KW83CviQ/3.jpg"/>
</a>
<a class="lightwindow" href="http://www.youtube.com/v/jkTNe85y0UI" params="lightwindow_width=425,lightwindow_height=350,lightwindow_loading_animation=true" title="" rel="">
<img src="http://img.youtube.com/vi/jkTNe85y0UI/3.jpg"/>
</a>
<a class="lightwindow" href="http://www.youtube.com/v/0k2pYlcxogU" params="lightwindow_width=425,lightwindow_height=350,lightwindow_loading_animation=true" title="" rel="">
<img src="http://img.youtube.com/vi/0k2pYlcxogU/3.jpg"/>
</a>
<a class="lightwindow" href="http://www.youtube.com/v/mw1_BQpHSpo" params="lightwindow_width=425,lightwindow_height=350,lightwindow_loading_animation=true" title="" rel="">
<img src="http://img.youtube.com/vi/mw1_BQpHSpo/3.jpg"/>
</a>
</div>
Hemos creado un rectángulo al que llamamos minivideos y allí colocamos los enlaces de los cuatro videos, usando las miniaturas del mismo YouTube. Guardamos y veremos ... vaya uno a sabe lo que veremos porque allí comienzan las diferencias entre una plantilla y otra. Pero, para eso le dimos un nombre así que agregaremos definiciones CSS antes de </b:skin>:
#minivideos {text-align: center;}
#minivideos a img {
height: 95px;
margin: 3px 3px 0 3px;
width: 130px;
}
Con esto, centraremos las imágenes y las separaremos un poco entre si. además, como esas miniaturas no son todas del mismo tamaño, las dimesionamos:


Ahora, vamos a decorarlo un poco, agregándole un borde a las imágenes y dándoles un padding (relleno) de tal manera de separar ese borde de la imagen en si misma:
#minivideos a img {
border: 2px solid #567;
height: 95px;
margin: 3px 3px 0 3px;
padding:3px;
width: 130px;
}

Claro que, estamos partiendo de una idea que tal vez es errónea, suponemos que tenemos una sidebar lo suficientemente ancha para que entren dos miniaturas pero, tal vez, eso no es cierto, ¿qué pasaría si es demasiado angosta?


Lo que pasa siempre que no hay lugar suficiente; lo que no entra se va para abajo así que, lo que debemos hacer es reducir el ancho de las imágenes.

En este ejemplo, la supuesta sidebar tiene 250 pixeles de ancho y como las imágenes tienen 130 pixeles cada una, no entran pero no basta reducirlas a 125 porque hay un detalle que debe tenerse muy en cuenta, el ancho necesario no es el ancho indicado por width sino ese valor más los bordes (border), rellenos (padding) y márgenes (margin). Quiere decir que podemos calcular el ancho máximo de la imagen con un poco de aritmética.


No podemos usar más de 125 pixeles; y tenemos 3 pixeles de margen, 2 pixeles de borde y 3 pixeles de relleno, o sea 8 pixeles a cada lado. Debemos entonces restar:
125 - 8 - 8 = 109
ese, será el ancho máximo de la imagen que podemos usar:
#minivideos a img {
border: 2px solid #567;
height: 80px;
margin: 3px 3px 0 3px;
padding: 3px;
width: 109px;
}

Y si quisiéramos poner 3 imágenes, haríamos lo mismo:
250 / 3 = 83
83 - 8 - 8 = 67
así que:
#minivideos a img {
border: 2px solid #567;
height: 49px;
margin: 3px 3px 0 3px;
padding: 3px;
width: 67px;
}

Seguimos con dos por fila achicando aún más la imagen para que se separe de los bordes y agregándole más detalles a gusto:
 #minivideos a img {
-moz-border-radius: 5px;
background-color: #345;
border: 2px solid #567;
height: 75px;
margin:3px 3px 0 3px;
padding: 3px;
width: 100px;
}

Y un último ejemplo, ya funcionando y con un efecto hover:
#minivideos a img {
-moz-border-radius: 5px;
background-color: #345;
border: 2px solid #567;
height: 75px;
margin: 3px 3px 0 3px;
opacity: 0.8;
filter:alpha(opacity=80);
padding: 3px;
width: 100px;
}
#minivideos a img:hover {
border: 1px solid #CDE;
height: 83px;
opacity:1;
filter:alpha(opacity=100);
padding:0;
width: 108px;
-moz-border-radius:0px;
}

Agregar un sitemap en Bing


Así como en su momento hablábamos de agregar sitemaps para Google y otros buscadores, el desembarco de Bing añade una opción más a la que podemos acceder a través de Bing Webmaster Center tools.

Para usarlo se necesita Windows Live ID, algo que puede obtenerse con facilidad utilizanco cualquier cuenta de correo. Una vez que ingresamos, tenemos que agregar la URL de nuestro sitio:

nombreblog.blogspot.com/

y, si lo deseamos, la dirección de nuestro sitemap que, en el caso de Blogger, será algo así:

nombreblog.blogspot.com/atom.xml

o así si usamos Feedburner:

nombreblog.blogspot.com/atom.xml?redirect=false


Enviamos el registro haciendo click en Submit y nos redirigirá a una página para autentificar nuestro sitio. Esto lo podemos hacer de dos maneras, alojando el archivo del sitemap (es el caso de los blogs de WordPress alojados en un servidor propio) o agregando una etiqueta META en la plantilla. En Blogger hacemos esto último así que copiamos el código que nos dan y lo pegamos antes de <b:skin>:

<meta content='00000000000000000000000000000000' name='msvalidate.01'/>


Guardamos la plantilla y esperamos uno minutos hasta que es autenticado.

A partir de allí ya podemos utilizar las herramientas disponibles, ver las páginas indexadas, los backlinks, etc:


Por lo que vi, funciona bien y es rápido, la información fácil de acceder, la ayuda es clara (aunque está en inglés) y el resto dependerá de si ellos logran posicionar su buscador e indexar los sitios de manera razonable.

Hay un dato que nos muestran por todos lados, lo llaman Domain Score y es algo que podría ser comparado al PageRank de Google. Por lo menos, la explicación que dan sobre el tema es similar: "provee una forma de medir la autoridad de un sitio o un dominio, donde cinco (son casillas verdes) es el valor máximo". No hay muchos detalles al respecto pero está basado en la cantidad y calidad de los enlaces que tiene cada página y de la relevancia del sitio. A diferencia del PageRank, ese valor es revisado y actualizado cada vez que se indexa la página.

Consultar el Padrón Electoral desde tu blog

Consultar el Padrón Electorial para las próximas elecciones nacionales de Argentina es sencillo, basta ingresar en la página del Poder Judicial y hacer la consulta respectiva aunque, dependiendo del horario, se hace un poco engorroso.

Hace un rato, desde lanacion.com me envian un mail que seguramente está circulando donde ofrecen un código que podemos incrustar en cualquier página web y crea un widget para realizar esa consulta a su base de datos donde incluye incluso un mapa con la ubicación.

El código es muy sencillo y quien quiera proveer el servicio debe copiar y pegar lo siguiente:
<iframe src="http://www.lanacion.com.ar/especiales/elecciones-legislativas-2009/padrones/padronEmbebido.asp" frameborder="0" width="250" height="190" scrolling="no"></iframe>

Sencillo menú con slider

Este es otro menú creado por leigeber.com que utiliza un efecto deslizante (slider). Es muy sencillo de aplicar, requiere un pequeño script que podemos descargar en formato ZIP desde la página del autor y que luego copiamos y pegamos, agregándolo a la plantilla antes de </head>:
<script type='text/javascript'>
//<![CDATA[
....... aquí copiamos el contenido del archivo .......
//]]>
</script>
El menú, lo creamos con un DIV y una lista:
<div class="menu">
<ul id="menu">
<li><a href="URL_enlace"></a>Enlace</li>
<li value="1"><a href="URL_enlace"></a>Enlace</li>
<li><a href="URL_enlace">Enlace</a></li>
<li><a href="URL_enlace">Enlace</a></li>
<li><a href="URL_enlace">Enlace</a></li>
</ul>
<div id="slide"></div>
</div>
<script type='text/javascript'>window.onload=function() {menuSlider.init('menu','slide');}</script>
A uno de los items (LI) le colocamos un parámetro extra value="1" con lo que indicamos cuál es el item base, aquel al que nuesto slider regresará, produciendo ese curioso efecto de resorte.


Todo lo que faltara sería crear las definiciones CSS del menú y allí está su mejor característica, podemos usar la que viene con el demo del script o inventar cualquier otra, las posibilidades son muchísimas. Un ejemplo:
<style type='text/css'>
.menu { /* es el bloque horizontal */
background: #789; /* el fondo de ese bloque */
height: 32px; /* la altura */
position: relative; /* obligatorio */
}
.menu ul { /* la lista */
height: 32px; /* la altura */
list-style: none;
margin: 0;
padding: 0 0 0 10px;
position: absolute;
z-index: 100;
}
.menu li { /* cada item de la lista */
float: left;
line-height: 32px; /* centrada verticalmente */
padding: 0 0 0 5px;
}
.menu a, .menu a:active, .menu a:visited, .menu a:hover { /* cada item es un enlace */
color: #CDE;
padding: 0 15px;
text-decoration: none;
}
#slide { /* es el cursor que se desplaza */
-moz-border-radius: 10px;
background: #000;
height: 32px;
position: absolute;
top: 0;
z-index: 10;
}
</style>

La longitud de los comentarios y otros límites

Los límites de Blogger son varios; hace tiempo había colocado una lista de ellos y ahora, la misma fuente nos habla de otro, bastante curioso: La longitud máxima de los comentarios.

Aparentemente, los comentarios no deben superar los 4.096 caracteres ... o sea MUCHOS sorpresa2

Según comentan, este no es un dato documentado en la Ayuda de Blogger aunque imagino que es porque nadie ha intentado semejante hazaña.

Allí nos dicen que los límites son estos:
  • Cantidad de blogs por cuenta: ilimitados.
  • Cantidad de entradas por blog: ilimitadas.
  • Tamaño de las entradas: las entradas individuales no tienen un límite específico pero las entradas muy largas pueden toparse con el límite de tamaño de la página.
  • Tamaño de las páginas: las páginas tienen un límite de tamaño de 1 MB. Sobrepasado ese límite se muestra un mensaje de error: "006 Por favor, póngase en contacto con el servicio de asistencia de Blogger".
  • Cantidad de comentarios en cada entrada; ilimitados.
  • Tamaño de las imágenes publicadas mediante Blogger móvil: 250K.
  • Miembros de un blog: ilimitado.
  • Descripción del blog: limitada a 500 caracteres sin HTML.
  • Información del perfil: máximo de 1.200 caracteres.
  • Intereses y favoritos del perfil: máximo de 20 elementos para cada uno y 60 caracteres por elemento (la versión inglesa dice 2.000 caracteres).
Con el tema de las imágenes ... ahhh ahi me parece que deberán ponerse de acuerdo porque la versión en inglés de la ayuda dice una cosa y la versión en español dice otra.

Cantidad de imágenes (versión EN): hasta 1GB de espacio en Picasa.
Cantidad de imágenes (versión ES): "si publica imágenes a través de Hello en un blog gratuito de BlogSpot, no existe límite alguno. Si las envía a través de un blog publicado vía FTP, estará limitado por la cantidad de espacio disponible en su servidor."

Lo transcribo textual porque no parece nada claro y eso de Hello no tengo idea qué significa.

How much? Too much ...


OTRA FORMA DE VIOLENCIA SEXUAL

El turismo sexual es un problema que afecta gravemente a los niños y niñas, víctimas inocentes de traficantes y explotadores.

No es un tema contemporáneo e involucra a diversas culturas, el común denominador es un infante, habitualmente una niña y un hombre o varios que disponen de ella. Empapado en el silencio y en la complicidad de los adultos, la negociación de niñas para el turismo sexual ha sido denunciada insistentemente. Los apoderados de las infantes, las brindan a los clientes que las llevan con ellos para vacacionar juntos durante una temporada (práctica largamente descripta por revistas europeas), o bien cuando llega un tour de turistas a un país, choferes que los trasladan o conserjes de hoteles reconocen a quienes pueden ofrecerles "el producto".

Cierta cantidad de estas niñas han sido víctimas del incesto por sus padres en los primeros años de vida, continuando con la experiencia hasta la pubertad, de manera que ingresan "en la práctica" conociendo la mecánica.

El lucro sexual comercial infantil en los países de América Latina y el Caribe, va en aumento por la cantidad de niños y niñas obligados a sobrevivir por sus propios medios o a contribuir con los ingresos a la familia, lo que explica el ambiente de abandono o situación de sobrevivencia en la calle de muchos de ellos.

Según UNICEF existen 100 millones de niños y niñas abandonadas en todo el mundo, y 40 millones viven en América Latina, si bien es importante que los países de la región impulsen el desarrollo del turismo como alternativa para el crecimiento económico, paralelamente es necesario desarrollar una estrategia de prevención del Turismo Sexual Infantil.

Para muchos extranjeros los países de Latinoamérica y el Caribe son baratos, resultan atractivos a las comunidades de pedófilos, corriendo la voz que se pueden encontrar niños pobres, rubios y de ojos claros. Algunos no planearon un viaje sexual, pero se les ofrece el "negocio". Otros viajan para relacionarse con adultos, pero "aceptan niños" y claro, también están los pedófilos que han planeado solo ese objetivo. Son personas instruidas, hombres de más de 35 años, de buen nivel económico de países desarrollados de Europa o de Estados Unidos.

El turismo sexual, la trata de personas y la prostitución infantil, son tres actividades que van de la mano, controlados por mafias criminales que operan en el ámbito internacional.

Desde cualquier punto de vista que lo miremos, la prostitución infantil es una de las prácticas más degradantes, igual que la existencia de clientes que hacen rentables estas actividades.

Graciela Roth - Palomas de papel

Campaña de ECPAT (Fight Against Child Cyber Pornography)

Wallpapers (IPhone 1)

Click en la imagen para previsualizar un modelo reducido.
Descargar el archivo ZIP que contiene las imágenes

NOTA: El ZIP contiene las imágenes de 320x480 pixeles y una versión para PC de 2560x1600.

REFERENCIAS:duoh.com

Incluir videos de Facebook en el blog

Incluir videos alojados en Facebook es sencillo, se requiere el mismo tipo de código que usamos para incrustar videos de cualquier otro servicio:
<object width="576" height="432" id="movie" type="application/x-shockwave-flash" data="http://www.facebook.com/v/XXXXXXX">
<param value="http://www.facebook.com/v/XXXXXXX" name="movie"/">
<param name="wmode" value="transparent" />
<param name="allowfullscreen" value="true"/>
</object">
Todo eso escrito en una sola línea si lo queremos colocar en una entrada y, donde lo único que varia es el ID del video, un sistema similar al que usa YouTube:

http://www.facebook.com/v/XXXXXXX

¿Y cómo podemos saber el ID del video? Entre otros modos, podemos usar una extensión de Firefox llamada Facebook Video que no sólo nos dá ese dato sino que además, permite descargarlos en nuestra PC, agregando una serie de enlaces y una guia con opciones de manera similar a lo que hacía un script de Greasemonkey.


REFERENCIAS:Infinitos Mundos

Tiempo al tiempo


El tiempo parece volar cuando nos falta y parece arrastrarse cuando nos sobra. Uno quisiera saber si esa velocidad tiene algo que ver justamente con eso, con nuestra necesidad relativa sonrisa

Resumen de dudas sobre JavaScript

Como son preguntas que se repiten una y otra vez, esta entrada trata de responder las más frecuentes referidas al tema de utilizar scripts en Blogger. Ya no se trata sólo de alojar los archivos sino, de usarlos correctamente.

Insisto, insisto, insisto: Lo mejor es agregarlos a la plantilla y utilizar la menor cantidad de archivos externos. De todas formas, la sintaxis correcta para agregar un script contenido en un archivo externo es la siguiente:
<script src='URL_archivo.js' type='text/javascript'></script>
¿Por qué es la correcta? Porque eso dicen las reglas diablo2 establecidas por la w3.org. Estas, indican que no puede haber etiquetas que no tengan su correspondiente etiqueta de cierre. Sin embargo, pese a que Blogger se supone que sigue reglas estrictas en su plantilla y nos vuelve locos cambiando cosas a su antojo, no parece haber leido esta así que si escribimos eso, al guardarlo, veremos esto:
<script src='URL_archivo.js' type='text/javascript'/>
En la práctica, salvo que a alguien se le ocurra intentar validar su código (algo absurdo en Blogger) no tiene mayor importancia.

La extensión de esos archivos es .js pero eso, sólo es una convención, en realidad, puede ser cualquier otra o no tener ninguna en absoluto, basta que sea un archivo de texto plano sin formato y que el contenido sea un código válido y no contenga etiquetas HTML.

El atributo type es obligatorio y el atributo language que muchas veces se ve es innecesario a menos que el lenguaje del archivo no sea JavaScript. Eventualmente, se agrega un atriburto charset si el script contiene caracteres especiales:
<script src='URL_archivo.js' type='text/javascript' charset='utf-8' />
Por lo general, se ubican en el HEAD de la página, es decir, antes de la etiqueta </head> porque ese es el lugar donde nos aseguramos que funcionen. Esto, provoca que, al cargarse la página, se produzca una demora ya que el navegador debe acceder a esos archivos, leerlos y ejecutarlos. Mientras eso ocurre, el resto de los procesos de carga se detiene. No hay una regla fija que nos permita decir que todos los scripts deben ubicarse en tal o cual lugar de nuestra plantilla, depende de qué hagan, si no se está seguro de eso, mejor seguir las indicaciones de quienes los han desarrollado o probado.

Muchos de ellos DEBEN ser incluidos en el HEAD porque deben ser ejecutados de manera inmediata pero, esto no ocurre siempre. Algunos, DEBEN ser ejecutados después que la pagina ha sido cargada y para eso existen instrucciones específicas:
<script type='text/javascript'>
window.onload=function() {
// esto se ejecutará cuando la pagina haya termiando de cargarse
}
</script>
Si el script posee instrucciones que modifican la página como innerHTML o appendChild, algunas versiones de Internet Explorer pueden generar un error "Internet Explorer no puede abrir el sitio de http://xxxxxxx. Operación anulada." así que, si debemos utilizarlas, hay que verificar que se ejecuten DESPUÉS que se ha cargado la página (más información). Este error, bastante común ha sido solucionado en IE8.

Una regla elemental es la siguiente: No podemos ejecutar un script que modifique nuestra página si eso que vamos a modificar aún no se ha creado.

Una página web se crea de manera secuencial, línea por línea tal cual se ve en el código fuente así que debemos estar atentos a ese orden. Por ejemplo:
<script type='text/javascript'> getElementById('ejemplo').style.display='none'; </script>
<div id='ejemplo'> ....... </div>
Es un error ya que el DIV llamado ejemplo se crea DESPUES del script y cuando este se ejecuta, aún no existe. El error generado dirá algo así: "getElementById is not defined" o "se esperaba un objeto".

Esto sería lo correcto:
<div id='ejemplo'> ....... </div>
<script type='text/javascript'> getElementById('ejemplo').style.display='none'; </script>
Es el tipo de error que se generará si un script se carga o se ejecuta en algún lugar, de manera equivocada. Por ejemplo es lo que ocurriría si ubicamos mal los scripts de los post relacionados, los emoticones, las diferentes funciones de expandir y contraer, etc. Todas ellas, dejarían de funcionar. Son funciones que se ejecutan al mostrar las entradas así que deben estar ANTES que estas se carguen.

Por el contrario, scripts como los de Twitter y Tumblr es conveniente ubicarlos al final de la página, antes de </body> para que se ejecuten después que la página ha sido cargada y de esa manera, tener el blog funcionando aún cuando los datos de esos servicios no sean accesibles. Sería bueno que Blogger hiciera lo mismo con algunos de sus scripts como los que manejan los comentarios, el buscador o los seguidores.

A diferencia del HTML, el lenguaje JavaScript es sensible a las mayúsculas y minúsculas así que ese detalle debe ser tenido muy en cuenta a la hora de darle nombre a las variables y las funciones.

Aunque hay excepciones, cada línea de código debe terminar con un punto y coma. Es una buena práctica acostumbrarse a hacerlo.

No es usual utilizar esto pero, los scripts externos también pueden cargarse usando código JavaScript; para esto, hay muchos métodos:
<script type='text/javascript'>
window.onload=function(){
if(!document.getElementById || !document.createElement){return;}
var nuevoScript = document.createElement('script');
nuevoScript.type = 'text/javascript';
nuevoScript.src = 'URL_archivo';
document.getElementsByTagName('head')[0].appendChild(nuevoScript);
}
</script>
o bien podemos usar una función:
<script type='text/javascript'>
function loadScript(src) {
nuevoScript = document.createElement( 'script' );
nuevoScript.src = src;
nuevoScript.type = 'text/javascript';
head = document.getElementsByTagName( 'head' )[0];
head.appendChild(nuevoScript);
}
</script>
Una función que usamos así:
<script type='text/javascript'>
loadScript('URL_archivo');
</script>
Para agregar código Javascript válido en las plantillas de Blogger, lo mejor es usar CDATA porque ciertos caracteres como < > & están prohibidos salvo que formen parte del código mismo:
<script type="text/javascript">
//<![CDATA[
....... aquí va el código .......
//]]>
</script>
Si no lo hacemos y el código tiene esos caracteres, pueden aparecer mensajes de error o funcionar mal. Lo mismo ocurrirá con las comillas simples y dobles, los códigos serán cambiados por &#39; y &quot;, provocando errores impredescibles.

Es importante saber que un script puede tener un código que se ejecuta apenas es cargado o bien, una función que se ejecuta sólo cuando la invocamos. Por ejemplo:
<script type='text/javascript'>
alert ('un mensaje');
function ejemploFuncion() {
alert ('otro mensaje');
}
</script>
alert ('un mensaje'); ese ejecutará inmediatamente; en cambio, para que se ejecute alert ('otro mensaje'); debemos llamar a la función:
<script type='text/javascript'> ejemploFuncion(); </script>
Las funciones también puden ser ejecutadas mediante eventos como onclick, onmouseover, etc. Para hacer esto, incluimos esos eventos como atributos de una etiqueta HTML:
<a href='javascript:void(0);' onclick='ejemploFuncion();"> click </a>
Un ejemplo: click

En Blogger, el atributo href es complicado de resolver. Si bien siempre es mejor que tenga un destino real (una dirección) para que funcione aún cuando el visitante tenga JavaScript desactivado, no siempre podemos hacerlo.

Otra forma de llamar a una función es esta:
<a href='javascript:ejemploFuncion();"> click </a>
Otro ejemplo: click

Tampoco es necesario que la etiqueta sea un enlace, pude usarse casi cualquier otra:
<span onclick='javascript:ejemploFuncion();"> click </span>
Un último ejemplo: click

Tratando de entender el header (3)

El efecto hover sobre el header del blog tal como lo muestra Templates Novo Blogger es realmente muy sencillo de realizar y una excelente idea que Ariane extiende a otros elementos de encabezado como los títulos de las entradas y los de la sidebar. Me voy a limitar a hacer lo mismo sólo en el header y así continuar esta serie para tratar de entenderlo.

El concepto general es siempre el mismo para cualquier cosa y, en realidad, es el mismo para cualquier efecto hover pero, por lo general, estamos a acostumbrados a usarlo sólo en los enlaces:
a {color: #CCCCFF;}
a:hover {color: #FF6666;}
Este efecto de cambiar propiedades CSS cuando colocamos el puntero del ratón encima de algo no está limitado a los enlaces y funciona en cualquier navegador moderno incluyendo IE7 e IE8 así que nada impide aplicarlo a cualquier cosa, incluyendo DIVs.

Aquí, siguiendo la misma idea, lo voy a aplicar sobre el header simplificado que utilizaba en la entrada anterior.

Usando una plantilla mínima, hago algunos cambios en Diseño | Fuentes y Colores y luego, vamos a colocarle una imagen de fondo a todo el blog. Para eso, le agregamo una propiedad al body:
body {
background: #8B9AA9 url(URL_imagenFondo) repeat-x left top;
.......
/* el resto lo dejo como está */
.......
}
Esa imagen es sólo una franja vertical que se repite de izquierda a derecha (repeat-x) y que tiene unos pocos pixeles de altura así que el resto, se rellena con un color de fondo (#8B9AA9).

Ahora, colocaremos una imagen de fondo que sirva como logo. Esta imagen tendrá un ancho equivalente al ancho del blog (es el valor de width) y una altura cualquiera (en este caso, 100 pixeles):
#header-wrapper {
margin: 0 auto 10px; /* está centrado y tiene un pequeño margen que lo separa de los posts */
height: 100px; /* el bloque debemos dimensionarlo con una altura igual a la imagen */
width: 860px; /* y el ancho total que es el ancho del blog */
}
#header-inner {
background: transparent url(URL_imagenLogo) no-repeat left top; /* es la imagen a usar */
height: 100px; /* debemos indicar la altura de esa imagen de fondo */
width: 100%; /* que ocupará todo el ancho del blog */
}
#header a { /* esa imagen es un enlace en las páginas interiores así que le damos los mismo valores */
display: block; /* transformamos el enlace en un rectángulo de cierto tamaño */
height: 100px; /* indicar la altura de la imagen de fondo */
width: 100%; /* indicamos que ocupa todo el ancho */
}
#header-inner:hover { /* es el efecto hover así que ponemos la segunda imagen */
background: transparent url(URL_imagenLogoHover) no-repeat left top;
}
El resultado será un header que cambiará de imagen si ponemos el cursor encima.

Ahora bien, un detalle a tener en cuenta es que si las imágenes son muy grandes, el efecto demorará porque la segunda imagen deberá ser cargada así que habrá que esperar que aparezca; eso pude ser importante ya que a veces, el efecto no será apreciable.

Para solucionarlo podemos recurrir a la vieja técnica de los sprites ¿Cómo es esto? En lugar de usar dos imágenes, usaremos sólo una. La mitad superior será la imagen "normal" y la mitad inferior será la imagen "hover". Así que esa imagen tendra un ancho igual al blog pero el doble de su altura (en este caso, 200 pixeles).


Cuando colocamos una imagen de fondo a un elemento no importa su tamaño. La imagen se ubicará donde le digamos. Si es muy chica, el resto del elemento se llena con el color indicado y, si la imagen es muy grande, se corta y alguna parte queda oculta. Esa característica es la que vamos a aprovechar.

¿Cómo posicionamos la imagen del fondo? Por defecto, se muestra empezando desde arriba a la izquierda y eso significan los últimos dos valores (left top). Es muy común leer que dicen 50% para centrarla pero, esos valores pueden ser cualquier otro así que podríamos decirle que en lugar de mostrar la imagen desde arriba, con lo cual la mitad queda oculta porque el espacio disponible es de sólo 100 pixeles de alto, la muestre desde a bajo y entonces, lo que se ocultará será la parte de arriba.

Cambiaríamos entonces las definiciones:
#header-inner {
background: transparent url(URL_imagenLogoDoble) no-repeat left top; /* es la imagen a usar */
height: 100px; /* debemos indicar la altura de esa imagen de fondo */
width: 100%; /* que ocupará todo el ancho del blog */
}

#header-inner:hover {
background-position: left bottom;
}
La imagen es una sola así que sólo se carga una vez y cuando realizamos el efecto, simplemente le decimos que se mueva para arriba (top) o para abajo (bottom).

El resultado puede verse en este blog de pruebas.

TinEye: Búsqueda de imágenes inteligente

TinEye es un buscador de imágenes con una característica que lo hace diferente, subimos una imagen desde nuestra PC o le indicamos la URL de una imagen ya alojada en la web y nos muestra los sitios donde se encuentra la misma u otra similar, las diferentes versiones existentes de la misma o aquellas que tengan la mejor resolución. Los formatos aceptados son JPEG, PNG y GIF hasta 1MB de tamaño.


Por ejemplo, un ejemplo sencillo con una imagen JPEG de 521x431 y 179.3KB muestra tres resultados: 384x306 de 16.6KB | 160x128 de 4.1KB | 120x150 de 4.4 KB

El servicio lo podemos usar de varias maneras y no es necesario registrarse aunque si lo hacemos, las imágenes que subimos se guardan y se crea un historial de búsquedas.


Podemos acceder directamente a la página, agregar una extensión para Firefox, instalar un plugin para Internet Explorer o añadir un bookmarklet a nuestros marcadores.

El buscador AJAX de Blogger

12 de julio del 2007 / 1 de junio del 2009 ... casi dos años. Una eternidad para cualquier producto web. Es el caso del gadget con el buscador Ajax de Blogger. Casi dos años accesible sólo via Blogger Draft lo que significa que no estaba terminado, que algo debía estar fallando o que había quedado traspapelado u olvidado debajo de una pila de seguidores. Recién ahora apareció el anuncio y ese gadget se ha agregado como elemento estándard (más información).

En realidad, lo curioso no era sólo que una empresa cuyo caballito de batalla es un buscador no tuviera un buscador integrado en sus blogs; lo curioso es que siempre funcionó bien (bien en téminos de Blogger) y, por lo que se ve, nada ha cambiado; el código sigue siendo el mismo. Lo vengo usando desde entonces y si bien es cierto que a veces tardaba un poco en conectarse, es un buscador que me gustó de entrada por dos motivos: porque muestra los resultados en la misma página y porque es fácilmente configurable con CSS lo que no es poco decir. Acostumbrados a tanto iframe y tanto script predigerido, es un soplo de aire fresco.

Lo agregamos desde Diseño | Elementos de la página | Agregar gadget, seleccionando Cuadro de búsqueda:


En la ventana, podemos marcar o desmarcar las distintas opciones que nos permiten definir dónde se harán las búsquedas. Cada una de ellas, aparecerá en una solapa diferente y todas ellas mostraran resultados preliminares en la misma página:


Este blog: es el buscador interno
Acceso desde aquí: busca en las entradas visibles, enlaces dentro de esas entradas, listas de sitios o listas de enlaces
Internet: es un buscador genérico
Listas de blogs y enlaces: agrega la posibilidad de buscar en todos los sitios agregados al blogroll

Una vez que definimos esto, lo agregamos y lo ubicamos donde queremos que se muestre.


Por defecto, leerá los datos de nuestra plantilla y se adaptará a las características gráficas de nuestro sitio. Veremos el cuadro de búsqueda y nada más. De manera automática, se añadirá un DIV oculto sobre el área de posts que es donde se mostrarán los resultados:
<div id="uds-searchControl">
.......
</div>
Eso quiere decir que tendremos dos áreas que podremos personalizar, el cuadro de búsquedas y el cuadro de resultados.


Si vamos a la plantilla y expandimos los artilugios veremos el código comenzando con algo así:
<b:widget id='CustomSearch1' locked='false' title='' type='CustomSearch'>
<b:includable id='main'>
<!-- el título igual que cualquier otro widget -->
.......
<!-- el código en si mismo -->
<div class='widget-content' style='width:95%'>
<div expr:id='data:widget.instanceId + &quot;_form&quot;'>
<span class='cse-status'><data:loadingMsg/></span>
</div>
</div>

<!-- y aquí comienza lo interesante -->
<!-- override gsearch.css -->
<style type='text/css'>
#uds-searchControl .gs-result .gs-title, #uds-searchControl .gs-result .gs-title *, #uds-searchControl .gsc-results .gsc-trailing-more-results,
#uds-searchControl .gsc-results .gsc-trailing-more-results * {color:<data:linkColor/>;}
#uds-searchControl .gs-result .gs-title a:visited, #uds-searchControl .gs-result .gs-title a:visited * {color:<data:visitedLinkColor/>;}
#uds-searchControl .gs-relativePublishedDate, #uds-searchControl .gs-publishedDate {color: <data:dateColor/>;}
#uds-searchControl .gs-result a.gs-visibleUrl, #uds-searchControl .gs-result .gs-visibleUrl {color: <data:urlColor/>;}
#uds-searchControl .gsc-results {border-color: <data:borderColor/>; background-color: <data:backgroundColor/>;}
#uds-searchControl .gsc-tabhActive {border-color: <data:borderColor/>; border-top-color: <data:activeBorderColor/>; background-color: <data:backgroundColor/>; color: <data:textColor/>;}
#uds-searchControl .gsc-tabhInactive {border-color: <data:borderColor/>; background-color: transparent; color: <data:linkColor/>;}
#uds-searchClearResults {border-color: <data:borderColor/>;}
#uds-searchClearResults:hover {border-color: <data:activeBorderColor/>;}
#uds-searchControl .gsc-cursor-page {color: <data:linkColor/>;}
#uds-searchControl .gsc-cursor-current-page {color: <data:textColor/>;}
</style>

<!-- el ícono para editar el elemento -->
<b:include name='quickedit'/>
</b:includable>
</b:widget>
En esa parte de STYLE, Blogger dice "override gsearch.css" y eso es lo importante y lo que lo hace distinto a tantos otros gadgets. Las características gráficas son genéricas y se cargan desde una hoja de estilo externa (gsearch.css). Para que se adapte a nuestro sitio, Blogger sobrescribe algunas propiedades y por eso lo hace allí, justo después de cargar el gadget.

Por defecto, sólo cambia algunos datos para igualar los colores de nuestra plantilla pero, nada impide agregar o modificar más definiciones.


Empecemos con el cuadro del buscador que es el más sencillo. Hay cuatro definiciones importantes:
input.gsc-input {
/* es el cuadro donde se ingresa el texto a buscar */
}
input.gsc-search-button {
/* es el botón "Buscar" */
}
.gsc-branding-text {
/* es el texto inferior "con la tecnología de" */
}
.gsc-branding-img-noclear {
/* es la imagen con el logo de Google*/
}
Configurar el cuadro de resultados requiere paciencia, tiene muchas definiciones y es bastante confuso pero veamos si es posible encontrar cada parte o por lo menos, aquellas más importantes.

El bloque total, el rectángulo oculto donde se muestran los resultados del buscador se llama uds-searchControl así que podemos usarlo si es necesario modificar su ancho y sus márgenes:
#uds-searchControl { }
En la parte superior se muestran las solapas con las opciones que hayamos seleccionado y ese rectángulo podemos modificarlo mediante:
#uds-searchControl .gsc-tabsArea { }
Difícilmente sea necesario hacerlo, más importante son las solapas. Hay de dos tipos y en ambas podríamos establecer bordes, color y fuente de los textos, colores de fondo, etc:
#uds-searchControl .gsc-tabhInactive { /* son las solapas inactivas */ }
#uds-searchControl .gsc-tabhActive { /* es la solapa activa */ }
A la derecha de estas se muestra un botón que permite volver a ocultar los resultados y tiene dos definiciones:
#uds-searchClearResults { }
div.gsc-clear-button { }

Todo lo demás se encuentra dentro de un rectángulo que tiene un borde visible y un padding que separa el contenido de esos bordes:
#uds-searchControl .gsc-results { }
Los resultados en si mismos tienen cuatro definiciones a las que podemos agregarles fondos, cambiar colres y fuentes, etc:
#uds-searchControl .gs-result .gs-title, 
#uds-searchControl .gs-result .gs-title *,
#uds-searchControl .gs-result .gs-title a:visited,
#uds-searchControl .gs-result .gs-title a:visited * { /* es el título de cada una */}

#uds-searchControl .gs-relativePublishedDate, #uds-searchControl .gs-publishedDate { /* es la fecha */}

#uds-searchControl .gs-result a.gs-visibleUrl, #uds-searchControl .gs-result .gs-visibleUrl { /* es enlace inferior */}

#uds-searchControl .gs-result .gs-snippet { /* es el resumen de las entradas encontradas */}
En esta última, se resalatan las palabras buscadas, eso se hace con una etiqueta B así que podríamos agregar algo así si quisiéramos que resaltarán de otro modo:
#uds-searchControl .gs-result .gs-snippet b { }

En la parte inferior, lo que veremos es un área de paginación llamada:
.gsc-results .gsc-cursor-box { }
En ese área, las páginas se muestran como enlaces numerados definidos por:
#uds-searchControl .gsc-results .gsc-cursor-box .gsc-cursor-page { }
y la página actual está resaltada:
#uds-searchControl .gsc-results .gsc-cursor-box .gsc-cursor-current-page { }
a la derecha, el enlace "más resultados" nos abrirá el buscador de normal:
#uds-searchControl .gsc-results .gsc-cursor-box .gsc-trailing-more-results { }