Curiosidades con CSS

JMiur [E]

Un cuadrado, dividido en cuatro partes
<div style="border-bottom: 50px solid lightblue; border-left: 50px solid red; border-right: 50px solid green; border-top: 50px solid yellow; height: 0;width: 0;"> </div>
Un triángulo.
<div style="border-bottom: 50px solid yellow; border-left: 30px solid #101921; border-right: 30px solid #101921; margin-bottom: 30px; width: 0;"> </div>
Un moño
<div style="border: 30px solid salmon; border-bottom: 15px solid #101921; border-top: 15px solid #101921; height: 0; width: 0;"> </div>

Una flecha.
Hacia allá
<style>
.right_arrow {position: relative; height: 50px; width: 250px;}
.right_arrow .body {background-color: SteelBlue; color:#FFF; line-height: 50px; text-align: center; height: 50px; width:100px;}
.right_arrow .arrow {border: 25px solid #101921; border-left: 10px solid SteelBlue; position:absolute; left:100px; top: 0; height: 0;}
</style>

<div class="right_arrow"><div class="body"> ... texto ... </div><div class="arrow"></div></div>
Y otra flecha.
Hacia el otro lado
<style>
.left_arrow {position: relative;}
.left_arrow .arrow {border: 25px solid #101921; border-right: 25px solid #CC0000; margin-left: -25px; overflow: hidden; width:0; height:0;}
.left_arrow .body {background-color: #CC0000; color: white; margin: -35px 0 0 25px; left:25px; text-align: center; top:15px; height:20px;}
</style>

<div class="left_arrow"><div class="arrow"></div><div class="body"> ... texto ... </div></div>

REFERENCIAS:Cult-f.net

Si veinte años no fueran nada


REFERENCIAS:arturogoga.com

Tumblr y Blogger (Parte 2)

Integrar Tumblr a Blogger o a cualquier otro sitio web es bastante sencillo, lo difícil va a ser explicarlo.

Como la característica principal de este servicio es crear entradas de diferente tipo (Text, Photo, Quote, Link, Chat, Audio, Video), las alternativas disponibles son muchas ya que esa diferencia de entradas no es abstracta, cada una de ellas tiene sus propias características y se pueden leer por separado o filtar para no mostrarlas parcial o totalmente.

Supongamos que una entrada es un video ¿Qué mostraríamos en nuestro blog? ¿El video en si mismo? ¿Un enlace? ¿Nada? ¿Mostraremos los textos con formato o sin formato? ¿Qué haremos con los audios? Es imposible generar scripts para todas las variantes así que, este modelo tendrá ciertos limites subjetivos:
  • los textos, las citas y los enlaces se mostarán sin formato
  • las imágenes, reducidas y sin los textos adicionales
  • el audio mostrará un reproductor pero no los textos
  • los videos no se mostrarán y serán reemplazados por un enlace
  • las entradas de conversaciones (Chat) serán ignoradas
  • se cargará una cantidad de entradas y se mostrará una por vez con la posibilidad de navegar entre ellas
Se basa en un modelo llamado tumblrBadge que utiliza JSON, y funciona de manera similar a lo que hacemos para leer Twitter.

Para implementarlo, debemos agregar un elemento HTML en la plantilla y allí, colocar el siguiente código:
<div id="contenedorTumblr"> </div>
Nada más; ese, será el DIV contenedor donde lo mostraremos.

El script lo vamos a colocar al final de la página, antes de </body> para que de este modo no interfiera con otros y que comience a cargar los datos cuando nuestra página ya esté visible.

<script type='text/javascript'>
//<![CDATA[

var listaTU=new Array();
var maxsTU=0;
var actualTU=0;

function tumblrCallback(obj) {

// --------------- datos a definir usuario ---------------
var usuario = "http://NOMBRE.tumblr.com/"; // la URL de Tumblr (colocar barra final)
var cuantosPosts = 10; // cantidad de posts a leer
// --------------- final datos a definir --------------------


var contarAux=0;
var tumblrs = obj;

for (var i=0; i<cuantosPosts; i++){
elPost= tumblrs.posts[i]; // leer cada uno de los posts

// algunos de los datos, los leeremos como textos planos eliminando los formatos
textoPlano = elPost["regular-body"] || elPost["photo-caption"] || elPost["quote-source"] || elPost["link-text"] || elPost["link-url"] || elPost["video-caption"] || elPost["audio-caption"] || "";

// filtramos los tipos de posts a mostrar
if (/regular|photo|quote|link|video|audio/.test(elPost.type)) {

// y en funcion del tipo de post, leemos el contenido
if (elPost.type === "photo") { // las fotos
photoURL = elPost["photo-url-250"];
contenido = '<div class=\"TumblrPhoto\" ><img src=\"' + photoURL + '\" /></div>'
} else if (elPost.type === "quote") { // las citas
contenido = '<div class=\"TumblrCita\"><span>' + elPost["quote-text"] + '</span>' + textoPlano + '</div>';
} else if (elPost.type === "link") { // los enlaces
contenido = '<div class=\"TumblrLink\"><a href="' + elPost["link-url"] + '">' + textoPlano + '</a></div>';
} else if (elPost.type === "video") { // los videos
contenido= '<div class=\"TumblrVideo\">VIDEO<span>' + textoPlano + '</span></div>';
} else if (elPost.type === "audio") { // los audios
contenido= '<div class=\"TumblrAudio\">' + elPost["audio-player"] + '</div>';
} else if (elPost.type === "regular") {
contenido = '<div class=\"TumblrRegular\">' + textoPlano + '</div>';
}

// creamos el codigo de salida
if (contenido) {
// en la parte superior, logo enlaces, feeds y navegacion
salida = '<table class=\"enlacesTumblr\" cellpadding=\"0\" cellspacing=\"0\"><tbody>';
salida += '<tr><td><a target=\"_blank\" href=\"' + usuario +'\"><img src=\"http://img145.imageshack.us/img145/2020/ttumblrs.png\" /> '; // LOGO TUMBLR
salida += '<a href=\"' + usuario + 'rss\" target=\"_blank\"><img src=\"http://img218.imageshack.us/img218/2353/trss.png\" /></a></td>'; // LOGO RSS
salida += '<td style=\"text-align:right;\"><span class=\"navegarTumblr\"><a href=\"javascript:navegaTU();\">siguiente</a></span></td></tr>';
salida += '</tbody></table>';
// luego, el contenido del post a mostrar
salida += contenido;
// por ultimo, el enlace directo a ese post
salida += '<div id=\"verTumblr\"><a target=\"_blank\" href=\"' + elPost.url + '\">ver post</a></div>';
// y lo guardamos en una lista
listaTU[contarAux] = salida;
contenido = "";
salida = "";
contarAux =contarAux +1;
}
}
}
// cuando terminamos de leer, mostramos el ultimo post publicado
maxsTU=contarAux;
document.getElementById('contenedorTumblr').innerHTML = listaTU[0];
}

function navegaTU() {
actualTU=actualTU+1;
if (actualTU==maxsTU) {
actualTU=0;
}
document.getElementById('contenedorTumblr').innerHTML = listaTU[actualTU];
}

//]]>
</script>
<script src='http://NOMBRE.tumblr.com/api/read/json?callback=tumblrCallback&amp;num=10' type='text/javascript'/>

Allí sólo debemos configurar dos datos:
// --------------- datos a definir usuario ---------------
var usuario = "http://NOMBRE.tumblr.com/"; // la URL de Tumblr (colocar barra final)
var cuantosPosts = 10; // cantidad de posts a leer
// --------------- final datos a definir --------------------
lo mismo haremos en el script final que es la llamada a JSON.

Un detalle (uno de tantos) que puede modificarse es cambiar el tamaño de las miniaturas de las entradas de tipo PHOTO:
// pueden ser 75, 100, 250, 400 o 500
photoURL = elPost["photo-url-250"];
Si quisieramos mostrar los videos y no el enlace a estos, deberíamos cambiar esto:
contenido= '<div class=\"TumblrVideo\">VIDEO<span>' + textoPlano  + '</span></div>';
por algo así:
contenido= '<div class="\TumblrVideo\">' + elPost["video-player"] + '</div>';
En el script hay dos imágenes ya alojadas en ImageShack, dos logos que pueden ser cambidos por cualquier otro. Tanto el script como las imágenes se encuentran contenidos en este archivo ZIP

Cada sector creado tiene un ID o una clase CSS para poder personalizar la salida así que podemos agregar el estilo antes de </head>.

<style>
#contenedorTumblr { /* el contenedor en si mismo */
font-size: 11px;
}
table.enlacesTumblr { /* la línea superior con enlaces */
margin: 5px 0;
padding: 0 10px;
width: 100%;
}
.navegarTumblr { /* enlace navegación entre tumblrs */
display: block;
text-align: right;
}
#verTumblr { /* la línea inferior */
margin-top: 5px;
text-align: right;
}
#verTumblr a {
margin: 5px 0;
padding: 0 10px;
text-align: right;
}
div.TumblrPhoto { /* un post de tipo PHOTO */
margin: 0 auto;
text-align: center;
}
div.TumblrCita { /* un post de tipo QUOTE */
margin: 0 auto;
text-align: right;
width: 90%;
}
div.TumblrCita span {
display: block;
font-style: italic;
text-align: center;
}
div.TumblrCita i {
font-style: normal;
font-weight: bold;
}
div.TumblrLink { /* un post de tipo LINK */
text-align: center;
}
div.TumblrVideo { /* un post de tipo VIDEO */
font-weight: bold;
text-align: center;
}
div.TumblrVideo span {
font-weight: normal;
}
div.TumblrAudio { /* un post de tipo AUDIO */
text-align:center;
}
div.TumblrRegular { /* un post de tipo REGULAR */
font-size: 11px;
}

</style>


Verificar que las URLs son correctas

La mayor parte de las veces, cuando me consultan sobre algún problema, el error es siempre el mismo, la dirección URL de algún archivo es errónea.

La URL de "algo" es eso que vemos en la barra de direcciones del navegador y en Blogger, siempre debe comenzar con http://

Sabiendo esto, debería ser sencillo verificar si la dirección que queremos usar es correcta o incorrecta, bastaría copiarla y pegarla en esa barra, pulsar Enter y ver dónde nos lleva.

Como el problema surge con archivos que queremos usar, lo que debemos ver es qué pasa cuando colocamos esa dirección. Por ejemplo, si se trata de imágenes, lo que deberíamos ver es la imagen en si misma, sola, sin nada más, en Firefox, incluso, el navegador nos mostrará su tamaño.


Supongamos que usamos ImageShack, subimos una imagen y al terminar, nos mostrará varias alternativas (en este momento se han simplificado bastante). De todas ellas, sólo una es la imagen en si, la que dice Direct link to image, la otra, Short link to image, nos abrirá una página.

http://img13.imageshack.us/img13/6812/esqueletob.gif
http://yfrog.com/0desqueletobg

Lo mismo ocurrirá con cualquier otro servicio. Por ejemplo, en Fileden, apenas la subimos, nos dará varias alternativas, una etiqueta, un enlace, etc,; también allí, el dato que nos importa es sólo uno: Direct URLs

http://www.fileden.com/files/2009/3/26/2379410/esqueleto.gif

En todos los servicios ocurrirá lo mismo; nos ofreceran varias opciones con distintos formatos y siempre, deberemos elegir la que indique un acceso directo al archivo aunque hay que tener en centa que, si bien hay muchísimos servicios que permiten alojar archivos, no todos permiten el uso directo de esos archivos (hotlink).

Si no son imágenes, verificarlo es igual de sencillo pero no siempre se nos mostrará el contenido en el navegador, dependerá de cuál usamos o  qué plugins, extensiones o configuración estemos usando. La regla general es, si el archivo se ve o si aparece la ventana para descargarlo, la URL es correcta en cambio si se abre una página web, la URL es incorrecta.

¿Corbatas? Corbatas


Sí. Está muy bien eso de la mini cámara espía en la corbata de la que habla SpamLoco pero, a decir verdad, prefiero algo un poco más informal:



Y, en todo caso, si quiero ponerme serio me compraría la corbata solar de la Iowa State University idea


REFERENCIAS:crookedbrains.net

Tumblr y Blogger (Parte 1)

Hace mucho que existen los llamados tumblelogs a los que la Wikipedia define como "blogs menos estructurados". Me gustó la descripción: "un tumblelog también tiene algo de esbozo, de apunte, de idea. Son las semillas de futuros post en un blog convencional, una especie de cuaderno de notas breves y personales que no admite comentarios ni intromisiones a pesar de ser público."

Un poco más seriamente, Jason Kottke dice:

Un tumblelog es un flujo de conciencia improvisado, un poco al estilo de las listas de enlaces de los linklog pero con más cosas además de enlaces. Me recuerdan a un antiguo estilo de blogs, en la época en que la gente los hacía a mano, antes de que Movable Type obligara a poner los títulos de los posteos, las entradas de los blogs se convirtieran en pequeños artículos de revistas, y los posteos pertenecieran a una conversación distribuida a través de toda la blogosfera. Robot Wisdom y Bifurcated Rivets son dos weblogs de un estilo más antiguo, que se parecen mucho a estos tumblelogs con mínimos comentarios, muy poca charla entre blogs, el mínimo suspiro de un algo terminado y publicado, casi pura edición ... realmente sólo una forma de publicar rápidamente las "cosas" con las que te encuentras cada día en la web.

El servicio gratuito más conocido (no el único) es Tumblr.com y hace tiempo que lo vengo usando, desde que cambió a su nueva versión muy mejorada

Como todas estas cosas de la web, sólo son una herramienta, tan buena o tan mala, tan útil o tan inútil como cualquier otra. En todo caso, lo bueno de esto es saber que existen y que están a nuestra disposición, aunque sólo sea para divertirse un rato.

La mejor forma de conocer los detalles es leer la wiki en castellano pero, tal vez, mejor que eso es entrar, crear uno y mirar. Es simple, elegimos un nombre y hacemos click en Get Started. Nos pedirán un email, que elijamos una contraseña y la URL que usaremos que, por defecto, será la misma del nombre elegido. Click en el botón inferior y listo.


Voy a cerrar las ventanas que se abren y que me guian para configurar las cosas. Eso lo podemos hacer en cualquier otro momento. Allí estamos, entonces en un escritorio (dashboard) simple donde nos mostrará qué cosas podemos hacer y aquí está justamente, la diferencia entre un tumblelog y un blog. Arriba hay unos íconos con los diferentes modelos de entradas que podemos hacer:

  • Text: es la alternativa más amplia, permite colocar un título y un texto desde un editor interno. Admite formatos y códigos HTML. En el ejemplo, incluso he puesto un script.
  • Photo: sirve para publicar imágenes (JPG, GIF, PNG o BMP 10MB máximo), las subimos desde nuestra PC o indicamos alguna que ya esté en la web en cuyo caso, también se alojaraá allí así que no se crean problemas de hotlink. La imagen podemos transformarla en un enlace o bien agregarle textos (caption) con el editor.
  • Quote: se usa para mostrar "citas", textos que se muestran en un formato diferente previamente establecido.
  • Link: los enlaces son eso, direcciones de lugares que nos interesen a los cuales podemos agregar descripciones.
  • Chat: no es un chat en si sino una "conversación", un diálogo que, al igual que los anteriores, se es un texto con cierto formato pre-establecido.
  • Audio: lo usamos para agregar archivos MP3 (10MB máximo) desde nuestra PC o desde algún sitio en la web con una sola limitación, sólo podemos subir uno por día. El resultado será una entrada con un reproductor ya incorporado.
  • Video: el servicio está pensado para usar una cuenta de Vimeo y si queremos subir alguno (50MB máximo), debemos tener una cuenta allí pero también podemos insertar videos de casi cualquier otro servicio, colocando la URL y eventualmente, también podemos colocar el código HTML.
En todos los casos, si desplegamos Advanced Options, veremos algunas alternativas extras
  • Publishing Options nos permite definir si el post será publicado de inmediato, si será programado (pondremos una fecha), si lo queremos guardar como borrador o si lo queremos hacer privado.
  • Tag nos permite agregar etiquetas a las entradas.
  • Set a custom post URL nos permite modificar la URL de la entrada, si no lo hacemos, será un número.
Probablemente, luego de experimentar un poco con estas cosas, decidamos empezar a personalizar nuestro blogcito así que, primero que nada, vamos a lo general: Account | Preferences desde donde podemos modificar nuestros datos, sincronizarlo con Twitter y, sobre todo, definir el modo del editor de textos que puede ser rich text editor (el valor por defecto), plain text/HTML (escribimos HTML de manera directa) o Markdown que parece interesante ya que no cambia los códigos como los otros modos:


La clave de nuestro blog está en la opción Customize, desde allí podremos cambiarlo por completo.
  • Info nos da la posibilidad de colocar el título del blog y eventualmente una descripción; agregar una imagen que servirá como avatar e incluso, establecer un dominio propio
  • Feeds nos permite importar hasta cinco servicios (via RSS) para agregar sus contenidos de manera automática.
  • Advanced sirve para establecer ciertas opciones como la fecha, agregar CSS (dependiendo del tema en uso), establecer la cantidad de entradas por página, habilitar la vista de imágenes en alta resolución, definir si los enlaces se abrirán en una nueva ventana, crear feeds reducidos, permitir la creación de URLs personales, agregar nuestro sitio a diferentes directorios y buscadores, etc.

La parte de diseño se define con dos opciones; con Appearance cambiamos algunos detalles menores como los colores de fondo; con Theme podemos seleccionar la "plantilla" que vamos a utilizar que, puede ser cualquiera de las allí listadas pero también podemos buscar en la web y usar otra. Para esto, debemos hacer click en Use custom HTML y allí, pegar el contenido del tema que queremos utilizar que, por lo general, es el contenido de un archivo TXT.

¿Dónde buscamos temas? El mismo Tumblr tiene una página donde los usuarios pueden agregar los que hayan creado pero en la web hay cientos de ellos y basta hacer una búsqueda en Google para encontrarlos; un buen ejemplo puede verse en speckyboy.com.

Tal como ocurre con cualquier otro servicio, podemos cambiar el tema cuantas veces se nos ocurra e incluso, crearlo nosotros mismos o modificar alguno. Para esto, hay una página explicativa donde se muestra la sintaxis de las distintas instrucciones. Quien haya modificado una plantilla de Blogger, no tendrá demasiados problemas en entender la idea (será tan difícil como acá pero, bueno ...)

Así, sin más, nuestro blog está listo pero la flexibilidad del sistema nos permite múltiples agregados. Algunos emplos y herramientas:
Sencillez, rapidez, son las dos virtudes principales de este tipo de servicio pero, no son las únicas. Me gusta la idea de la integración con otros servicios y que sea abierto hasta el extremo de ser muy flexible, incluye feeds y tiene URLs accesibles a cualquiera sin necesidad de tener una cuenta (léase Facebook). No es una panacea pero funciona muy pero muy bien ¿Se nota que me gusta?

Como poseen un API público, no es nada complicado integrarlo a Blogger así que a eso nos dedicaremos en la próxima entrada aunque algo de eso puede en la sidebar de mi blog de pruebas

Las fuentes de texto y sus unidades

Las unidades que utilizamos para establecer el tamaño de las fuentes de los textos de una página web siempre han despertado polémicas porque hay opiniones para todos los gustos. En resumen, las posibilidades se limitan a dos tipos básicos, absolutas y relativas.

Las absolutas tienen como referencia las impresoras: pt (puntos), pc (picas), in (inches/pulgadas), cm (centímetros) y mm (milímetros).

Las relativas tienen como referencia la resolución de la pantalla: px (pixeles) o bien al tamaño de otras fuentes definidas antes: % (porcentaje). em (em space), ex (x space); más una variante, palabras clave: xx-small | x-small | small | medium | large | x-large | xx-large que son relativas a la fuente definida por el navegador que usamos.

Algo con lo que la mayoría de los desarrolladores está de acuerdo es que el uso de puntos (pt) no es lo más recomendado ya que es una medida que sólo tiene sentido para imprimir, si bien hay una relación de puntos por pulgada eso no es válido en una pantalla y sólo es aplicable al papel.

Descartada entonces esa unidad y todas las absolutas que, en realidad, sólo deberían usarse cuando hablamos de impresoras; en una página web, deberíamos centramos en el uso de las llamadas relativas y entre ellas, sólo hay dos que permiten controlar los tamaños con cierta claridad: px y em ¿cuál usar?

Hay que entender que em es una medida relativa a otra fuente así que 1em, así sólo, no significa demasiado, estamos diciendo que el tamaño de algo es igual al tamaño de otra fuente ¿de cuál? de la que está definida por el el elemento contenedor y si no hay ninguna, la que use el navegador así que, si vamos a manejarnos con ellas, lo lógico es definir alguna con px, aunque sea, la del body:
body {
.......
font-size: 14px;
}
Ahora sí, hecho esto, podemos decir que una etiqueta tendrá una fuente que será igual, menor o mayor que esa:
h2 {font-size: 2em;} /* será del doble del tamaño que la definida en body */
small {font-size: 0.8em;} /* será un 80% más chica que la definida en body */
Esto del elemento contenedor y las herencias no es tan complicado como parece aunque a veces, se hace difícil de seguir el rastro (igual que en la vida real). Cuando una etiqueta está dentro de otra, la que la contiene es el elemento padre (parent) y la contenida es el elemento hijo (child):
<div id="bloque_1" style="font-size:20px;">
<div id="bloque_2">
<p> ... este texto tendra 20 pixeles de alto ... </p>
</div>
</div>
En ese caso, P es "hijo" del div bloque_2 y es "nieto" del div bloque_1; la herencia, hace que el tamaño del "abuelo" se traslade al "nieto" sonrisa

Un ejemplo concreto:
<style>
div#ejemplo {font-family:Arial; font-size: 14px;}
div#ejemplo big {font-size: 2em;}
div#ejemplo small {font-size: 0.8em;}
</style>

Este es el texto "normal" que tiene 14 pixeles.
Este es un título más grande
Y este un texto más pequeño

La unidad em es útil cuando hacemos referencia a un elemento "padre". Este método es el aconsejable cuando estamos interesados en mantener cierta compatibilidad con distintas plataformas y navegadores, las fuentes se "escalan" y basta cambiar el tamaño base para cambiar todo el sitio:
div#ejemplo {font-family:Arial; font-size: 18px;}

Este es el texto "normal" que ahora tiene 18 pixeles.
Este es un título más grande
Y este un texto más pequeño

El problema con esta unidad es que ese mismo beneficio es a su vez un contratiempo ya que se pierde cierto control. No veremos las cosas tal como las pensamos, el resultado, variará. Tal vez, un renglón se transforme en dos o un espacio de tamaño fijo sea demasiado grande o demasiado chico para el contenido.

Por el contrario, como px está relacionado con la resolución de la pantalla será más fácil de controlar aunque allí también habrá diferencias porque la misma fuente no se verá igual en distintos sistemas operativos.

Moraleja: no hay soluciones universales y cada uno deberá elegir la que crea más conveniente o le resulte más cómoda.

Por lo general, prefiero usar px y reservar em para casos especiales. Por ejemplo, si quiero crear un bloque de títulos donde establezco un tamaño de fuente en pixeles, es buena idea usar em para definir alturas y separaciones, de tal manera que, si cambiamos la fuente, las proporciones se mantienen.
<style>
.ejemplosTitulos {
background-color: #456;
border: 2px dotted #9AB;
color: #FFF;
font-family: 'Century Gothic','Times New Roman';
font-weight: normal;
height: 2em;
line-height: 2em;
margin: 0 auto;
text-align: center;
width: 400px;
}
</style>

<h5 class="ejemplosTitulos" style="font-size:18px;">El título de algo</h5>
<h5 class="ejemplosTitulos" style="font-size:36px;">El título de algo</h5>

El título de algo

El título de algo

El título de algo

El título de algo

La pasión de Chagall



Wallpapers (exteriores)

Wallpapers (exteriores)

Y un extra que muy generosamente me envia José desde Fotos Nitosblog


Descargar wallpaper (1024x682)

Cómo transferir un blog a otra cuenta

Si algún día se nos ocurre eliminar un blog con una URL de blogspot, esa dirección no se liberará sino que quedará inhabilitada y nadie podrá usarla excepto nosotros mismos ya que queda asociada, para siempre a nuestra cuenta. No importa si el blog no es utilizado jamás o si nadie publica. Blogger dice: una vez creado, es tuyo para toda la eternidad. Aún eliminando la cuenta de Google podemos intentar recuperar los blogs eliminados utilizando este formulario.

Hasta ahí, no hay problemas pero ¿qué pasa si por algún motivo queremos transferirlo? Esto no es ilógico, tal vez quisiéramos deshacernos de esa URL, dársela a otra persona o, si tenemos varias cuentas, en algún momento se nos ocurra unificarlas.

Para liberar la URL, lo que debemos hacer es cambiarla. Vamos a la Configuración | Publicación y colocamos otra:

Dirección Blog*Spot .blogspot.com

Luego, republicamos el blog.

Para transferir un blog a otra cuenta, el proceso es más engorroso:
  1. Entramos al blog a transferir y vamos a Configuración | Permisos
  2. Agregamos un nuevo autor
  3. El nuevo autor recibirá un mail de invitación que deberá aceptar
  4. Le damos al nuevo autor permisos de Administración
  5. El nuevo administrador debe entrar con su cuenta y en las mismas opciones, eliminar la cuenta original
Como sólo podemos acceder a una cuenta de Google a la vez, si es una transferencia a nosotros mismos, podríamos usar dos navegadores distintos para evitar tener que entrar y salir constantemente.

Feo feo feo


¿Presumir?

FrogJS: Galería de imágenes con Prototype

FrogJS es una galería de imágenes que con muy poco, crea un efecto muy vistoso e incluye la opción de soportar textos adicionales y enlaces.

Requiere Prototype + Scriptaculous así que, si no las tenemos en nuestra plantilla, primero, deberemos agregar esas librerías.

Luego, descargamos el ZIP donde, lo único necesario es el archivo frog.js que agregaremos a la plantilla.
<script type="text/javascript" src="URL_frog.txt"></script>
El CSS es muy sencillo. Lo colocamos inmediatamente después:
<style type="text/css">
#FrogJS { /* es el bloque donde se mostrará la galería */
height: 650px; /* el alto total */
margin: 0 auto; /* será centrado */
width: 600px; /* el ancho total */
}
#FrogJSCredit { /* son los textos visibles del atributo TITLE */
/* cualquier propiedad */
}
#FrogJSCaption { /* son los textos visibles del atributo ALT */
/* cualquier propiedad */
}
</style>
Para usarla, sólo debemos colocar una serie de enlaces dentro de un DIV al que le daremos un ID exclusivo llamado FrogJS:
<div id="FrogJS">
<a href="URL_imagen" title="texto optativo" rel="URL_optativa">
<img src="URL_miniatura" alt="texto optativo" />
</a>
.......
</div>
Lo logico es tener dos imágenes, la de tamaño normal y una miniatura pero, también sería posible usar sólo una y redimensionarla en el HTML:
    <img src="URL_imagen" alt="texto optativo" width="tamaño" />
En el atributo HREF del enlace, colocamos la imagen "grande"; en el atributo TITLE el texto (optativo) que se verá inmediatamente debajo y en el atributo REL el enlace optativo a alguna página.

En la etiqueta IMG colocamos la miniatura y en su atributo ALT, el texto inferior optativo.

Modificando el script, podemos configurar algunos detalles extras:
// CONFIGURATION VARIABLES
var thumbTop = '60px'; // es la distancia superior de las miniaturas
var loadingAni = 'images/loading.gif'; // es la imagen de carga que se muestra al cargar las imágenes
var scalePercent = '300'; // la escala del efecto fade
Un detalle más. Aconsejan agregar, luego del DIV, un script para ocultar la galería mientras esta se carga. Para evitar tener que hacer eso, agregué ese código en el archivo de esta manera. Vamos al final y ponemos:
function frogHIDEthumbs() {
var ribbit = document.getElementById('FrogJS');
ribbit.innerHTML += '<center>... cargando ...</center>';
// o bien si queremos una imagen en lugar del texto
// ribbit.innerHTML += '<img src="URL_imagen" />';
var anchors = ribbit.getElementsByTagName('a');
for (var i=0; i
anchors[i].style.display = 'none';
}
}
Así que, en el post, luego del DIV escribo:
<script type="text/javascript">frogHIDEthumbs();</script>

Vivamus lacinia urna non magna. Integer ipsum libero, pharetra condimentum, auctor sit amet, pharetra eget, tortor.Donec imperdiet, dui id scelerisque cursus, elit massa facilisis nulla, ultricies suscipit leo diam accumsan magna.Aenean vulputate ullamcorper augue. Cras est. Phasellus eget felis.Integer pellentesque sem. Morbi euismod tellus. Phasellus eu velit. Nam rutrum purus et nibh.Pellentesque lorem nunc, adipiscing et, varius nec, consequat et, libero.Proin pharetra scelerisque diam! Nulla facilisi.Praesent nunc tellus, sodales quis; tincidunt in, consequat et, nulla.Donec mattis est eu urna. Sed in tellus a sapien ornare auctor.Quisque justo. Aenean et nunc non nisi aliquam porta. Aliquam erat volutpat. Aliquam tempor, justo ac luctus iaculis.Vestibulum ut nulla? Quisque dapibus lacinia elit. Fusce elit tellus, suscipit id, consectetur in, interdum in, urna.

Posts con fechas anticipadas

Las preguntas sobre cómo hacer que una entrada aparezca siempre al inicio del sitio, es una pregunta repetida. Como Blogger no tiene la posibilidad de crear una página de inicio, es un método bastante sencillo para simularlo; tal vez no sea el ideal pero es fácil y si lo combinamos con algo como como el truco de personalizar los posts quitando títulos y otros detalles; el resultado puede ser más que aceptable.

Antes, era muy sencillo de hacer, bastaba colocar una fecha anticipada y eso era suficiente; como las entradas se ordenan cronológicamente, siempre aparecería esa como primera.

Esto cambió cuando se agregó la posibilidad de programar posts para que se publicaran en cierta fecha. Ahora, si colocamos una fecha anticipada, la entrada aparecerá como pendiente. Entonces, la forma de hacerlo ha variado un poco.

Primero, escribimos el post y lo publicamos. Luego, debemos editarlo y hacemos click en Opciones de entrada para desplegar esa sección y le cambiamos la fecha por otra, lejana, por ejemplo, cambiamos el año:


Y volvemos a publicar el post.

Eso hará que se re-ordene y aparezca siempre al tope del home.

Surtido publicitario






PageGlimpse: Usar miniaturas de páginas web

PageGlimpse es un servicio que nos permite generar miniaturas de páginas web y mostrarlas en nuestro sitio, sin necesidad de crearlas previamente, utilizando sólo etiquetas HTML o JavaScript.

Implementar esto es extremadamente sencillo. Primero que nada, debemos crear una cuenta gratuita, enseguida nos enviarán un correo a través del cual nos informarán cuál es nuestra clave (una serie de números y letras).

Para utilizar el servicio, en 925html.com han creado una librería de apenas 4KB que nos permite manejar estas miniaturas pero, en realidad, si miramos la documentación del API de PageGlimpse, nos daremos cuenta que no hace falta todo eso y que todo se reduce a crear una URL o un enlace con los parámetros correctos.

Por ejemplo CLICK ACÁ

Ahí se abre en una ventana modal con LightWindow pero, podría colocarse directamente:


Una función muy interesante que nos ofrecen es que, si la miniatura no existe, ellos la generarán en menos de 24 horas.

¿Cómo creamos esa URL? Lo mínimo que debemos excribir es algo así:

http://images.pageglimpse.com/v1/thumbnails?url=http://XXXXXXXXXX&devkey=XXXXXXXXXX

La base es:

http://images.pageglimpse.com/v1/thumbnails?

a lo que le agregamos algunos parámetros uniendolos con el símbolo &:
  • devkey es un texto obligatorio, la clave que previamente nos adjudicaron
  • url es un texto obligatorio con la dirección URL de la página que queremos mostrar y siempre, debe comenzar con http:// o https://
  • size es un texto opcional que tiene tres valores posibles y que establecen el tamaño de la miniatura a mostrar:
    • small muestra una imagen de 150x108 (es el valor por defecto)
    • medium muestra una imagen de 280x202
    • large muestra una imagen de 430x310
  • root es un texto opcional que indica si se mostrará la miniatura de la raiz del dominio y no de una página interior si esa miniatura no está disponible. Por defecto es yes.
  • nothumb es u texto con la URL de una imagen alternativa que será mostrada en caso que la miniatura no esté disponible.
Un ejemplo:

http://images.pageglimpse.com/v1/thumbnails?url=http://www.blogger.com/&size=large&devkey=XXXXXXXXXX

Esa URL la podemos aplicar a cualquier etiqueta, por ejemplo IMG:
<img src="http://images.pageglimpse.com/v1/thumbnails?url=http://www.blogger.com/&size=large&devkey=XXXXXXXXXX" />
Con un poco de JavaScript, podríamos simplificar als cosas aún más. Podríamos crear una función que creara esa etiqueta IMG por nosotrso, enviándole algunos datos.

Agreguemos esto antes de </head>:
<script type='text/javascript'>
// <![CDATA[
function getMiniaturaPG (cual,como) {
if (cual == null){return}
if (como == null){como = 'small'}
document.write('<img class="miniPG" src="http://images.pageglimpse.com/v1/thumbnails?url=' + cual + '&size=' + como + '&devkey=XXXXXXXXXX" />');
}
// ]]>
</script>
Por supuesto, reemplazando XXXXXXXXXX por nuestra clave personal.

Y lo usaríamos de este modo:
<script>getMiniaturaPG('http://unaDireccion');</script>
En cuyo caso, se mostrará la miniatura de tamaño mínimo, o bien, podemos agregarle el parámetro para mostrar miniaturas más grandes:
<script>getMiniaturaPG('http://unaDireccion','small');</script>
<script>getMiniaturaPG('http://unaDireccion','medium');</script>
<script>getMiniaturaPG('http://unaDireccion','large');</script>
Como en el script, la etiqueta tiene una clase (miniPG), podríamos darle propiedades CSS para mostrarla con cierto diseño: por ejemplo:
.miniPG {
background-color: #000;
border: 2px solid #456;
margin: 5px;
padding: 5px;
}
O crear enlaces:

CSS: Sobre IDs y clases

Algo que siempre causa alguna confusión cuando escribimos CSS es determinar si debemos aplicar esas definiciones como clases o IDs ¿Cuál es la diferencia?

Tanto una como otra sirven para identificar una etiqueta y, de ese modo, nos resulta más sencillo agregarle propiedades. Por ejemplo:
<style>
#nombreID {color: red;}
.nombreClase {color: blue;}
</style>

<div id="nombreID"> este texto será rojo </div>
<div class="nombreClase"> este texto será azul </div>
Para definir las propiedades de un ID le anteponemos el símbolo # al nombre y para definir una clase, usamos un punto.

Una regla elemental y que no debe violarse dice que sólo usaremos un ID si esa etiqueta es única, no debería haber dos etiquetas con el mismo ID en la misma página; en cambio, usaremos class si es un estilo que repetiremos en diferentes etiquetas.

Además, suele decirse que el atributo ID se utiliza para definir áreas específicas de una página (el header, el footer, un menú, etc) y una clase se usa para definir estilos de tipo general (enlaces, listas, etc).

Los ID nos permiten organizar el estilo e identificar etiquetas para luego manipularlas con JavaScript. Las clases, nos evitan escribir códigos repetidos y esa es su mayor utilidad.

Hay varias formas de implementarlas:
a.green {color: green;}
hará que los enlaces que contengan esa clase, se muestren de color verde:
<a class="green"> el enlace será de color verde </a>
<p class="green"> este párrafo NO será de color verde </p>

En cambio, esta otra:
.green {color: green;}
hará que cualquier etiqueta que contengan esa clase, se muestren de color verde:
<a class="green"> el enlace será de color verde </a>
<p class="green"> este párrafo también será de color verde </p>

Tanto las clases como los IDs pueden combinarse asi que no es extraño ver cosas como estas:
<div id="unNombre" class="unaClase"> ....... </div>
o bien:
<div class="unaClase otraClase"> ....... </div>
¿Para qué usamos ID y class juntas? Por ejemplo:
<style>
.ejemploCSS {
background-color: #000;
border: 1px solid #CCC;
float: left;
height: 50px;
margin-right: 10px;
padding: 10px;
width: 150px;
}
#ejemploCSS1 {color: white;}
#ejemploCSS2 {color: yellow;}
#ejemploCSS3 {color: red;}
</style>
Tenemos una clase donde hemos definido una serie de propiedades como fondo, bordes y tamaño que aplicaremos a un DIV así que, si colocamos tres, uno al lado del otro, se verán iguales. Ahora bien, le agregaremos un ID a cada uno de ellos para darles una propiedad exclusiva, el color del texto:
<div id="ejemploCSS1" class="ejemploCSS"> ... </div>
<div id="ejemploCSS2" class="ejemploCSS"> ... </div>
<div id="ejemploCSS3" class="ejemploCSS"> ... </div>
Se vería esto:

BLANCO
AMARILLO
ROJO

¿Y qué pasa si hay propiedades contradictorias? Por ejemplo, definimos el color de fondo tanto en la clase como en el ID ¿Cuál se verá? ¿será negro como dice la clase o variará como dicen los IDs?:
<style>
.ejemploCSS {background-color: #000;}
#ejemploCSS1 {background-color: white;}
#ejemploCSS2 {background-color: yellow;}
#ejemploCSS3 {background-color: red;}
</style>
Como se ve, el fondo será el del ID y el de la clase será ignorado.

BLANCO
AMARILLO
ROJO

Claro, uno puede decir, lo que ocurre es que, primero le decimos que es negro y luego le decimos que es de otro color, lo sobrescribimos, es lógico pero, veamos si lo escribimos al revés:
<style>
#ejemploCSS1 {background-color: white;}
#ejemploCSS2 {background-color: yellow;}
#ejemploCSS3 {background-color: red;}
.ejemploCSS {background-color: #000;}
</style>
Ahora ponemos el fondo negro al final ¿qué se verá?

BLANCO
AMARILLO
ROJO

Pués, lo mismo ya que, para decirlo de alguna manera, un ID es "más importante" que una clase (más información). Para hacer que una clase "sobrescriba" una propiedad de un ID, le agregamos la palabra !important:
<style>
.ejemploCSS {background-color: #000 !important;}
#ejemploCSS1 {background-color: white;}
#ejemploCSS2 {background-color: yellow;}
#ejemploCSS3 {background-color: red;}
</style>

BLANCO
AMARILLO
ROJO

Tres animaciones en blanco y negro



Wallpapers (infantiloides)

Wallpapers (infantiloides)

PicFont, PicReflect, muchos Pics

PicFont es un sitio que permite agregarle textos a las imágenes ya sea que estas las tengamos en la PC o que estén alojadas en la web.

Nos da tres formas diferentes de hacerlo: con Picture seleccionamos la imagen y agregamos un texto directamente (con o sin borde), con Canvas definimos un rectángulo de color donde agregaremos los textos; en Shape seleccionamos alguno de los diseños predeterminados. En el editor de textos colocamos este y además, podemos elegir fuentes, tamaños y colores, rotamos los textos, los posicionamos, etc.


PicSlice divide una imagen en partes más pequeñas, lo cual es útil cualdo esta es muy grande. Definimos la cantidad de sectores y el resultado lo podemos descargar en un archivo ZIP. Eventualmente, también nos permite recortar una imagen.

PicShadow genera una sombra y nos da como resultado otra imagen semitransparente que podemos descargar.

PicReflect es similar pero, esta vez, lo que se crea es una imagen reflejada en cierta dirección.

TextAnim genera textos animados con múltiples opciones.

Usando una lista de scripts

El tema de las tan mentadas mudanzas y los alojamientos inconstantes me provocó varios dolores de cabeza. Es que, dada la forma en que hago las cosas, no se trataba sólo de reubicar archivos y modificar los enlaces. Muchísimas entradas tienen scripts individuales que son los que uso como modelo o ejemplo para tal o cual cosa. No podrían agregarse a la plantilla porque lo único que se conseguiría es un volumen inmanejable de códigos que no son de uso corriente sino eventual, sólo se ejecutan en una entrada en particular. Para estos casos, no hay más remedio que usar archivos externos.

Cambiarlos de un sitio a otro es tedioso pero a esto le sumamos un segundo inconveniente, hay que editar esas entradas individuales y volverlas a publicar ¡Sólo encontrarlas ya es un problema!!!

Comencé a hacerlo y decidí detenerme porque pensé: "Ahora lo hago ¿y la próxima vez?" Ya van tres veces, esta debe ser la última.

Entonces, se me ocurrió que lo mejor era ... usar otro script ... combatir fuego con fuego sonrisa

La idea era esta. En lugar de tener que escribir algo como:
<script src="http://.../unScript.js"></script>
Tal vez fuera posible tener alguna clase de lista o índice y una fucnión que escribiera automáticamente el código ese en una entrada, diciéndole algo así como aquí va el script número 24. De esa manera, no habría que modificar jamás el post, bastaría cambiar esa lista.

Al grano. Lo que hice fue agregar un elemento HTML al inicio de la plantilla en esa sección especial que alguna vez comenté:
<b:section class='contenedorScripts' id='contenedorScripts'/>
Y allí coloco la función:
<script type="text/javascript">
function leerScript(cual) {
scriptLISTA=new Array(
// esta es la lista con las direcciones URL de los diferentes scripts en uso
0,"", // no lo uso
1,"http://.../unScript.js",
2,"http://.../otroScript.txt",
.......
49,"http://.../cualquierScript.txt"
);
regNum = cual * 2 +1;
document.write('<script src="' + scriptLISTA[regNum] + '"><\/script>');
}
</script>
Cada uno tiene la misma estructura: un número de orden correlativo, una coma y la dirección URL entre comillas. Terminan todas con una coma excepto la última que no debe tenerla.

En las entradas o donde se nos ocurra, podemos cargar el script de este modo:
<script>leerScript(unNumero);</script>
así que:
<script>leerScript(49);</script>
cargará el script que está alojado en http://.../cualquierScript.txt

De esta forma, si el archivo es modificado, ya sea en su contenido o en su ubicación, basta modificar la lista para que siga funcionando.

Una variante es la que me propuso Nico, en lugar de utilizar un array con una lista correlativa idenficada con números, usar variables con un nombre exclusivo, algo que puede ser útil si se trata de algunos pocos scripts. Por ejemplo:
<script type="text/javascript">
// primero definimos los nombres
var animcollapse = "http://.../unScript.js";
var emoticones = "http://.../otroScript.txt";

// luego la función
function leerScript(cual) {
document.write('<script src="' + cual + '"><\/script>');
}
</script>
Y si quisiéramos usar el script de emoticones, lo cargaríamos así:
<script>leerScript(emoticones);</script>
Sea cual sea el método, debe tenerse en cuenta que la función siempre debe estar antes que su llamada porque sino, no funcionará.

Sin palabras

FloatBox: Nueva ventana modal de usos múltiples

Floatbox es otra de esas ventanas modales similares a LightWindow pero que tiene algunas características importantes que la diferencian. La principal es que no requiere librerías extras por lo que termina siendo muy liviana y funciona sin limitaciones.

Permite mostrar imágenes individuales, galerías, slidshows, páginas externas, archivo de Flash, archivos de Quicktime y videos de casi todos los servicios existentes (YouTube, Google Videos, Vimeo, Dailymotion, etc.). El script tiene muchas opciones para configurarlo, botones para redimensionar las ventanas e imprimir su contenido; también puede agregarse información extra que también se muestra dentro de otra ventana modal,

Podemos descargarla en formato ZIP y allí encontraremos los dos archivos necesarios: floatbox.js y floatbox.css.

En Blogger, el CSS podemos agregarlo directamente en la plantilla entre etiquetas STYLE antes de </head>:
<style type='text/css'>
... aquí pegamos el contenido del archivo ...
</style>
O bien alojarlo en un archivo externo y cargarlo con LINK.

Debajo, agregaremos el script al que no le veo otra posibilidad que cargarlo desde un archivo externo (con extensión JS o TXT):
<script type="text/javascript" src="URL_floatbox.js"></script>
Para simplificar las cosas , este otro ZIP contiene los archivos ya traducidos al español y las imágenes alojadas.

Para utilizarlo, basta agregar el parámetro rel="floatbox" a un enlace. Por ejemplo:
<a rel="floatbox" href="URL_imagen">TEXTO o IMAGEN</a>
Click para ver un ejemplo con una imagen simple

Para crear una galerías de imágenes usamos rel="floatbox.group". Por ejemplo:
<a href="URL_imagen1" rel="floatbox.group">1</a> | <a href="URL_imagen2" rel="floatbox.group">2</a> | <a href="URL_imagen3" rel="floatbox.group">3</a>
o bien:
<a href="URL_imagen1" rel="floatbox.group">TEXTO o IMAGEN</a><a href="URL_imagen2" rel="floatbox.group"> </a><a href="URL_imagen3" rel="floatbox.group"> </a>
GALERIA MODELO 1 -->1 | 2 | 3
GALERIA MODELO 2 -->CLICK

Con un esquema similar, podemos crear un slideshow automático, usando el parámetro rel="slideshow":
<a href="URL_imagen1" rel="slideshow">TEXTO o IMAGEN</a><a href="URL_imagen2" rel="slideshow"> </a><a href="URL_imagen3" rel="slideshow"> </a>
EJEMPLO DE SLIDESHOW -->CLICK

Otros ejemplos:
  • una página externa CLICK [ver código]
  • un archivo SWF CLICK [ver código]
  • un video de YouTube CLICK [ver código]
  • un video de Google Videos CLICK [ver código]
  • un video de Vimeo CLICK [ver código]
  • un video de Dailymotion CLICK [ver código]
  • un video de blip.tv CLICK [ver código]

Una de las opciones más interesantes es la posibilidad de usar miniaturas en los enlaces de texto como este o este otro. Al poner el cursor encima del enlace, veremos una miniatura y al hacer click, veremos la imagen original.

Para eso, debemos agregar dos parámetros rel="floatbox" y class="fbPopup":
<a rel="floatbox" class="fbPopup" href="URL_imagenOriginal">ENLACE DE TEXTO<img src="URL_imagenMiniatura"/></a>
Hay muchas más alternativas y configuraciones. En la página de demos pueden verse algunas de ellas. La información es bastante completa, el sitio tiene una página con descripción detallada y un foro de soporte.

REFERENCIAS:Poca Tinta

Efectos hover al estilo Twitter

Me preguntaron si era posible usar un efecto similar al que se ve en páginas como Twitter, es decir, que ciertos íconos o enlaces permanezcan ocultos hasta que ponemos el mouse encima de cierta área:



Esto es posible reproducirlo con bastante facilidad, la estructura del código HTML sería algo así:
<div class="recuadroC">
... lorem ipsum dolor sit amet ...
<span class="iconos">
<div>
<a href="laQueQueremosHacer" class="enlaceIco"> </a>
</div>
</span>
</div>
En resumen, un bloque DIV con cualquier contenido, dentro el cual colocamos una etiqueta SPAN y otro bloque DIV con los íconos que servirán de enlaces. La clave de todo está en las definiciones CSS. Un par de ejemplos:

Fusce augue? Fusce magna. In mi. Etiam aliquet porttitor ligula. Curabitur auctor ultricies lectus. Donec placerat. Pellentesque convallis quam sit amet diam! Curabitur lectus. Duis rutrum placerat leo. Fusce euismod nibh sit.

Fusce augue? Fusce magna. In mi. Etiam aliquet porttitor ligula. Curabitur auctor ultricies lectus. Donec placerat. Pellentesque convallis quam sit amet diam! Curabitur lectus. Duis rutrum placerat leo. Fusce euismod nibh sit.

<style>
.recuadroC { /* el bloque */
cursor: pointer;
padding: 10px 30px 10px 10px; /* el contenido no debe ocupar todo el bloque */
position: relative; /* esta es la propiedad clave */
width: valorpx;
}
.recuadroC .iconos { /* el bloque del SPAN */
position: absolute; /* lo ubicamos dentro del DIV */
right: 5px; /* lo ponemos a la derecha */
top: 5px; /* los valores pueden ser otros */
}
.recuadroC a { /* los enlaces serán imágenes */
background: transparent url() no-repeat 50% 50%;
display: block;
height: valorpx; /* el alto de la imagen */
visibility: hidden; /* lo hacemos invisible */
width: valorpx; /* el ancho de la imagen */
}
.recuadroC a.enlaceIco { /* es la imagen */
background-image: url(URL_imagen);
}
.recuadroC:hover {
/* cualquier propiedad */
}
.recuadroC3:hover a.enlaceIco { /* cuando ponemos el mouse encima */
visibility: visible; /* lo hacemos visible */
}
</style>

Este es un ejemplo concreto ...

Publicar en Blogger desde dispositivos móviles

Creo que esto ya estaba en Blogger Draft pero ahora ya está en el escritorio normal de Blogger. Son dos íconos que aparecen al lado de cada blog que tengamos en nuestra cuenta; uno de ellos es un acceso más directo al llamado Mail2Blogger; el otro es la posibilidad de publicar a través de teléfonos móviles:


Algo similar, veremos en la pestaña de Configuracion donde ahora, dirá Correo electrónico y móvil. Allí veremos la posibilidad de tener una dirección para la creación de entradas por correo electrónico:


Y además, un enlace para añadir y configurar dispositivos móviles (más información)


OutWit: Buscar y descargar imágenes y documentos

Buscar documentos de cierto tipo en Google es posible pero los resultados suelen ser poco claros.

OutWit Hub es una extensión que nos permite organizar esas búsquedas de manera muy simple. la primera vez que lo instalamos, agrega dos cosas, OutWit Kernel que es el motor principal y OutWit Docs que es el módulo para buscar documentos (PDF, DOC, presentaciones, plantillas de cálculo, SWF, etc (ver captura).

Cada módulo está pensado para un tipo de búsqueda específica y en un futuro, ya que el sistema está en fase beta, podrán agregarse de manera individual. Sin embargo, en este momento, hay otro módulo disponible: OutWit Images, pensado para navegar, compartir o descargar imágenes.


REFERENCIAS:labnol.org

El CSS es como ...

Pués nada, puro Twitter via @lablogueria.

Completando la frase: el CSS es como ...
  • el CSS es como el ajedrez. Lo elemental se aprende en un día y se puede pasar el resto de la vida tratando de dominarlo.
  • el CSS es como algunas religiones. La gente se vuelve fundamentalista con mucha rapidez.
  • el CSS es como una canción de los Beatles. Simple y bella.


REFERENCIAS:CSS Tricks

Los códigos condicionales

Blogger'Sphera muestra una serie de entradas que explican de manera muy interesante, cómo funcionan los códigos condicionales en Blogger. Aquí intento traducirlos.

Primero, entendamos qué es un condicional.

Cuando se usa un IF, lo que hacemos es comparar dos cosas y obtener como respuesta VERDADERO (true) o FALSO (false). Lo utilizamos para "tomar una decisión"; si la respuesta es VERDADERO hacemos algo y si es FALSO, eventualmente, hacemos otra cosa. Este es un ejemplo:
<b:if cond='clima == llueve'>
... me quedo en casa porque la respuesta es VERDADERA, llueve ...
<b:else/>
... me voy a pasear porque la respuesta es FALSE, no llueve ...
</b:if>
Lo mismo podríamos hacer al revés si, en lugar de == que indica igualdad, usamos != que indica una desigualdad. Por ejemplo, en lugar de preguntarnos si llueve, podríamos preguntarnos si NO llueve:
<b:if cond='clima != llueve'>
... me voy a pasear porque la respuesta es VERDADERA, no llueve ...
<b:else/>
... me quedo en casa porque la respuesta es FALSA, llueve ...
</b:if>
No necesariamente debo tener una respuesta para cada situación, podría tener sólo una:
<b:if cond='clima == llueve'>
... me quedo en casa porque la respuesta es VERDADERA, llueve ...
</b:if>
En los lenguajes de programación, este tipo de instrucciones es fundamental, todo termina siendo una larga lista de condiciones. En Blogger, las cosas son mucho más limitadas porque no podemos comparar cualquier cosa, sólo podemos comparar los datos a los que ellos nos dan acceso y sólo pdoemos hacerlo en ciertos lugares ya que muchos de ellos no estan disponibles en cualquier parte de la plantilla.

De todos modos, hay algunos que podemos usar para muchas cosas, los que nos indican en que tipo de página estamos; de este modo, ciertas cosas se ejecutarán o no, dependiendo de donde estemos.

El dato que indica eso es data:blog.pageType que puede tener tres posibles valores:
<b:if cond='data:blog.pageType == &quot;item&quot;'>
esto sólo se mostrará en una entrada individual
</b:if>

<b:if cond='data:blog.pageType == &quot;archive&quot;'>
esto sólo se mostrará en las páginas que listan entradas
</b:if>

<b:if cond='data:blog.pageType == &quot;index&quot;'>
esto se mostrará en todas las demás
</b:if>
La combinaciones de igualdad y desigualdad, hará que podamos mostrar u ocultar algo con bastante precisión:
<b:if cond='data:blog.pageType != &quot;item&quot;'>
esto se mostrará en cualquier página excepto en las entradas individuales
</b:if>
Hay más posibilidades. Con esta condición, verificamos que estemos en el home de nuestro blog:
<b:if cond='data:blog.url == data:blog.homepageUrl'>
esto se mostrará sólo en el home
</b:if>
Si bien hablo de "mostrar", las condiciones no sólo sirven para eso. Podemos condicionar casi cualquier otra cosa:
<b:if cond='data:blog.url == data:blog.homepageUrl'>
<style>
... estas propiedades de estilo sólo se aplicararán al home ...
</style>
</b:if>

<b:if cond='data:blog.url == data:blog.homepageUrl'>
<script>
... este script sólo se cargará en el home ...
</script>
</b:if>
Hay varias posibilidades más. Una de ellas nos permite detectar una entrada individual especifica. Supongamos que quisiera hacer algo en esta entrada: http://vagabundia.blogspot.com/2009/04/ocultando-codigos-mientras-los-probamos.html

Tenemos tres alternativas:
<b:if cond='data:blog.pageTitle == &quot;Ocultando códigos mientras los probamos : Vagabundia&quot;'>
data:blog.pageTitle es el contenido de la etiqueta TITLE del HEAD.
<b:if cond='data:blog.url == &quot;http://vagabundia.blogspot.com/2009/04/ocultando-codigos-mientras-los-probamos.html&quot;'>
data:blog.url es la dirección URL de la entrada que podemos averiguar cuando publicamos el post.
<b:if cond='data:blog.pageName == &quot;Ocultando códigos mientras los probamos&quot;'>
data:blog.pageName es el título de la entrada individual y es la forma más sencilla de filtrar entradas.

Algo similar podemos hacer con las etiquetas:
<b:if cond='data:blog.pageName == &quot;NOMBRE_ETIQUETA&quot;'>
o bien:
<b:if cond='data:blog.url == &quot;http://miBlog.blogspot.com/search/label/NOMBRE_ETIQUETA&quot;'>
Si bien Blogger no nos permite tener condiciones múltiples en una sola instrucción, las podemos anidar, o sea, colocar una dentro de otra. Por ejemplo si quisiera que algo se mostrara en todas las páginas excepto en las páginas individuales y en el home, podría hacer esto:
<b:if cond='data:blog.pageType != &quot;item&quot;'>
... NO es una página de entradas, puede ser el home o cualquier otra
<b:if cond='data:blog.url != data:blog.homepageUrl'>
... NO es el home así que es el tipo de página que estoy buscando
</b:if>
</b:if>
Un ejercicio más complejo. Condicionamos el color de los textos de las entradas:
<b:if cond='data:blog.pageType != &quot;item&quot;'>
<b:if cond='data:blog.url == data:blog.homepageUrl'>
<style type='text/css'>
.post-body {color: black;}
</style>
<b:else/>
<b:if cond='data:blog.pageName == &quot;BLOGGER&quot;'>
<style type='text/css'>
.post-body {color: blue;}
</style>
<b:else/>
<style type='text/css'>
.post-body {color: red;}
</style>
</b:if>
</b:if>
<b:else/>
<style type='text/css'>
.post-body {color: green;}
</style>
</b:if>
¿De que color serán en las entradas individuales? ¿Y en la página de inicio? ¿Y cuando naveguemos la etiqueta BLOGGER? ¿Y en el resto de las páginas? No es un concurso así que la respuesta puede verse online.

La palabras

Buenas, malas, sencillas, complejas. Esas que nos ponen la piel de gallina o nos dejan mudos. Caricias y bofetadas. Palabras lujosas o mal vestidas. Ornamentales, suprefluas, elementales, indispensables. Mi más sentido pésame. Hola. Adiós. Por favor. Gracias. Palabras y más palabras. Graves, agudas, esdrújulas. Palabras que se ordenan solitas mientras escribimos una carta de amor que nunca enviaremos. Palabras que a veces no significan nada para los otros y que nos resultan tan indispensables como el agua o el aire. Palabras que explican el mundo o lo tergiversan. Horas esperando las que queremos ecuchar. Miedo a no encontrar las que expliquen lo inexplciable. Exactas, evasivas, inquietas, desnudas, inasibles cristales en la nieve. Extintas, mágicas, divinas palabras. Palabras que se rompen. Palabras que se cumplen. Te doy mi palabra y eso es más que suficiente.


REFERENCIAS:Las palabras

Wallpapers (abduzeedo.com)

Wallpapers (Abduzeedo)

REFERENCIAS:abduzeedo.com/

Mundo animal




Sitios de videos alternativos

Algunos sitios donde podemos encontrar cortos de video experimentales o realizados por estudiantes de animación. Algiunos se pueden ver en Flash y hay otros que requieren tener instalado Real Player o QuickTime.


The Spider es una animación basada en las obras de la artista Louise Bourgeois.

Almohadas

Click para ver las imágenes.

REFERENCIAS:amazon.com

Sobre IDs y bloques ocultos

Cuando insertamos un bloque con cierto contenido, utilizamos una etiqueta. Dependiendo de cómo lo hacemos o el uso que le daremos, estará en una etiqueta DIV, P, UL, IMG, TABLE, etc. Sin importar cuál sea, a los efectos prácticos, esa etiqueta no es otra cosa que un rectángulo donde adentro "hay algo" que puede ser cualquier cosa, incluyendo otras etiquetas.

Esos rectángulos pueden ser controlados de manera individual si les colocamos un nombre único, es decir si los identificamos con precisión y para eso, usamos un parámetro llamado ID. Por ejemplo:
<div id="pepito"> ....... </div>
<img id="unaImagen" src="laImagen" />
<p id="TEXTO1234"> ....... </p>
El nombre que le ponemos no importa, puede ser cualquiera y contener letras, números o guiones pero no espacios en blanco. Puede estar en mayúsculas, minúsculas o ambas cosas aunque debemos recordar que JavaScript es sensible a eso así que cuando usamos esos nombres en un código, hay que usar el mismo criterio ya que id="TEXTO1234" e id="texto1234" no serán el mismo.

Los IDs deben ser únicos, es decir, no debe haber dos iguales en una misma página porque si luego los queremos manipular, el navegador no sabrá a cuál nos referimos.

Es gracias a esos IDs que podemos usar JavaScript para cambiar dinámicamente (cuando la pagina ya se ha cargado) las propiedades de esos bloques; por ejemplo, mostrarlos u ocultarlos a voluntad.

Usando CSS es sencillo ocultar el contenido de algo, basta colocarle la propiedad display: none:
<div style="display: none;"> ... este es el contenido ... </div>
Esa propiedad es común a todas las etiquetas así que, podemos ocultar cualquier parte de una página web pero ¿para qué sirve ocultar algo? Muchos creen que ocultar algo utilizando este método alivia la carga de una página pero, eso no es cierto. Justamente, el que eso no sea cierto es lo que nos permite hacer el proceso inverso, es decir, mostrarlo, sin necesidad de recargar nada y por lo tanto, el efecto es casi instantáneo por una sencilla razón, ya está allí desde el inicio, ya se cargó junto con el resto, no lo vemos pero está ACÁ ABAJO.
Para hacerlo visible, usamos la propiedad contraria que es display:block y que es la propiedad por defecto de la mayoria de las etiquetas así que:
<div style="display: block;"> ... este es el contenido ... </div>
y:
<div> ... este es el contenido ... </div>
serán visibles y:
<div style="display: none;"> ... este es el contenido ... </div>
será invisible.

Pero ¿cómo hacemos para permutar entre ambos estados? ¿cómo hacemos para que algo oculto se muestre y algo visible se oculte? Para eso usamos JavaScript, dándole una instrucción que cambie el estilo CSS de algún elemento al que le hemos dado un nombre. En general, sería así:

nombreID.style.propiedad = 'valor';

Para que no tengamos problemas a la hora de indicarle al navegador cuál es la etiqueta que vamos a modificar, en lugar de usar nombreID, usamos una función interna:

getElementById('nombreID').propiedad = 'valor';

o bien:

document.getElementById('nombreID').propiedad = 'valor';

La forma de identificar la propiedad suele ser similar a la propiedad CSS aunque hay variaciones. En este caso serán:

getElementById('nombreID').style.display = 'block';
getElementById('nombreID').style.display = 'none';

¿Cómo aplicamos esto? Para que funcione siempre, sin importar el navegador, lo mejor es utilizar enlaces. En estos enlaces, basta agregar un parámetro más, un evento. El más común sería onclick:
<a href="javascript:void(0);" onclick="getElementById('ejemplo').style.display='block';">TEXTO O IMAGEN</a>
<div id="ejemplo" style="display:none;'> ....... </div>
En ese ejemplo, haciendo click sobre el TEXTO O IMAGEN, el bloque oculto llamado ejemplo, se mostraría.

¿Y cómo lo ocultamos otra vez? Una forma sería agregarle otro enlace dentro del elemento oculto que lo cierre:
<a href="javascript:void(0);" onclick="getElementById('ejemplo').style.display='block';">TEXTO O IMAGEN</a>
<div id="ejemplo" style="display:none;'>
.......
<a href="javascript:void(0);" onclick="getElementById('ejemplo').style.display='none';">CERRAR</a>
</div>

Funciona pero podemos hacerlo mejor y simplificarlo. Por ejemplo, es muy común usar una función que agregamos antes de </head> y que nos permite permutar entre dos estados. A esto, suele llamarsele efecto toggle:
<script type='text/javascript'>
//<![CDATA[
function toggle(cual) {
var elElemento=document.getElementById(cual);
if(elElemento.style.display == 'block') {
elElemento.style.display = 'none';
} else {
elElemento.style.display = 'block';
}
}
//]]>
</script>
¿Que hace eso? Cuando lo ejecutamos, enviamos el nombre de un ID y la función verifica el estado. Si está visible, lo oculta y si está oculto lo muestra. Un ejemplo de MOSTRAR/OCULTAR

Lo usamos de manera similar, con un enlace y el evento onclick:
<a href="javascript:void(0);" onclick="toggle('ejemplo');">TEXTO O IMAGEN</a>
<div id="ejemplo" style="display:none;'> ....... </div>
Para que ese efecto estuviera completo, faltaría algo, hacer que el texto del enlace cambie de tal modo que un usuario supiera que basta hacer click otra vez en el mismo para cambiar de un estado a otro.

Hay muchos métodos para eso pero, aqui va otro script más que podemos agregar antes de </head>:
<script type='text/javascript'>
//<![CDATA[
function toggleEnlace(accion, cual) {
if (accion == "mostrar") {
document.getElementById("miContenido"+cual).style.display = "block";
document.getElementById("miEnlace"+cual).href="javascript:toggleEnlace('ocultar',"+cual+")";
document.getElementById("miEnlace"+cual).innerHTML = "CONTRAER";
}
if (accion == "ocultar") {
document.getElementById("miContenido"+cual).style.display = "none";
document.getElementById("miEnlace"+cual).href="javascript:toggleEnlace('mostrar',"+cual+")";
document.getElementById("miEnlace"+cual).innerHTML = "EXPANDIR";
}
}
//]]>
</script>
Y lo usamos de esta manera:
<a id="miEnlace1" href="javascript:toggleEnlace('mostrar', 1)">EXPANDIR</a>
<div id="miContenido1" style="display:none;"> ... CONTENIDO OCULTO 1 ... </div>

<a id="miEnlace2" href="javascript:toggleEnlace('mostrar', 2)">EXPANDIR</a>
<div id="miContenido2" style="display:none;"> ... CONTENIDO OCULTO 2 ... </div>

EJEMPLO 1 EXPANDIR | EJEMPLO 2 EXPANDIR | EJEMPLO 3 EXPANDIR

Ocultando códigos mientras los probamos

Cuando quiero probar cosas, suelo aplicarlas en un blog auxiliar que tiene una copia del blog original y que sirve para ser destruido sin mayores inconvenientes pero, a veces, eso no es suficiente porque no es una copia exacta; ciertos datos no pueden ser reproducidos; no tiene los mismos posts, ni los mismos comentarios, ni el mismo feed. Son muchas las diferencias y esas diferencias hacen que algunas pruebas deban hacerse directamente en el original.

Obviamente, allí hay que hacerlas con mucho más cuidado, recordando cada paso dado para poder volver atrás y restaurar los  códigos si algo anda mal. Es riesgoso pero además, puede ser molesto porque tal vez, por alguna razón, no queremos que esa pruebas sean visibles, queremos mantenerlas ocultas a los visitantes hasta tanto decidir si las aplicaremos o no.

Eso último, puede ser resuelto si aplicamos el mismo criterio que se aplicaba para acceder al panel de Blogger directamente desde el blog.

Sea cual sea el código que queremos probar, basta colocarlo entre estas etiquetas:
<span class="item-control blog-admin">
... aquí ponemos nuestro código ...
</span>
De esa manera, si estamos logueados con nuestra cuenta de Blogger podremos verlo pero permanecerá oculto para cualquier otro que no tenga permisos de administrador.

No es nada del otro mundo pero puede sernos útil en determinadas condiciones y funciona bien, si no fuera así, estarían viendo una imagen agregada con este método verguenza

Dígale goodbye a IE6 y siga adelante


Humor e ironía. Así califica SpamLoco la campaña para salvar a Internet Explorer 6, una broma del día de los inocentes que solicitaba agregar firmas para peticionar que la antigualla se expandiera a todas las plataformas.

Parece extraño que aún se continue utilizando un navegador tan obsoleto, sería lo mismo que tener un auto que funcione con carbón o con leña porque la tecnología es un viento arrollador y en este caso, aún más.

Las cifras que muestra un comentario, tomadas de StatCounter son alarmantes:


Actualizar el navegador que utilicemos, sea el que sea, debería ser una prioridad para cualquier usuario pero, aún más, para quienes desarrollan sitios web y no hablo de los grandes, hablo de cada uno de nosotros. Nadie que administre un blog debería preocuparse por IE6 y sus problemas; el hecho de que muchos visitantes lo sigan utilizando no es excusa; estamos hablando de desterrar definitivamente el uso de un programa que ya se ha jubilado, que ya tiene versiones nuevas desde hace años y que esas nuevas versiones lo han mejorado muchísimo.

No veo a nadie preocupado si cierta página se ve mal en Mosaic ni esté interesado en saber por que las pirámides de Egipto no tienen aire acondicionado.

Mientras no preocupemos por IE6, seguirá existiendo. Es hora que descanse en paz. Démosle las gracias por los servicios prestados y sigamos adelante.

Sobre mudanzas, archivos y otras cuestiones

¿Época de mudanzas forzosas? Aprovechemos la crisis para poner orden ... algo de orden, aunque sea un poquito.

Nos hemos acostumbrado a depender demasiado de los servicios externos porque creimos que vivíamos en un mundo estable, pero todo es efímero y la web es mucho más dinámica de lo que podamos soñar. Hay quienes creen que Google es internet pero hace apenas unos años, Google no existía y Yahoo reinaba sobre nosotros los mortales; si vamos para atrás, otros reyes duraron menos que un suspiro y esto, que nos parece permanente y que ha existido siempre, no es más que un pequeño destello. Entendamos primero eso para que nuestra estadía sea lo menos volatil posible.

Un blog, el nuestro, tiene dos partes, muy distintas entre si. Una es todo aquello que lo mantiene online, la otra, su contenido, es decir, las entradas y los comentarios, eso que va variando con el tiempo, apilándose, desactualizándose, transformándose muchas veces en irrelevante. La primer parte es sustancial porque de ella depende la segunda y ahora, cuando se cierran puertas como tantas otras veces, es necesario buscar soluciones más permanentes.

Sólo hay dos alternativas: o Blogger provee la solución creando las condiciones para ese alojamiento o debemos acostumbrarnos a no depender de servicios externos, minimizándolos al máximo.

La primera sería la obvia y la que resolvería todos los problemas de raiz. Nadie habla de un Blogger al estilo Rapidshare, hablamos de un lugar de espacio limitado, casi ridículamente limitado comparado con el que provee Google para sus otros servicios.

Ellos han respondido a estas peticiones de manera lacónica y terminante: "no estamos pensando en algo así, hay otros servicios externos que lo permiten, usen esos". Que no estan pensando es obvio y que hay otros servicios es cierto, del mismo modo, podría preguntárseles para qué crearon Google Sites existiendo Blogger y por qué en Google Sites pueden alojarse archivos y en Blogger no. Seguramente, tendrán alguna excusa-explicación para eso pero no debe ser demasiado clara para nosotros, los pobres mortales. Los designios de Google-Dios son inexcrutables y sus verdades hay que tomarla así, como un acto de fe.

De todas maneras, así como antes se intentó una campaña para presionar un poco utilizando la WishList, ahora le sumamos otra más que utiliza Twitter y que es una idea de TwittBoy y BanakaBanaka!!:


Aunque no creo que haya campaña posible que pueda torcerles el brazo ya que, simplemente, son sordociegomudos, de todos modos, la presión sirve, aunque más no sea para molestarlos y sacarnos la bronca de encima. Nada se pierde así que: a presionar se ha dicho diablo2


Como no podemos esperar hasta que Blogger decida escuchar: debemos hacer algo YA MISMO.

Nuestra plantilla es eso que hace que el blog sea un blog, requiere de códigos que lo hacen funcionar y de algunos datos que deben buscarse y cargarse. El código lo guarda Blogger y para que todos esos otros datos permanezcan más o menos accesibles siempre, deberíamos hacer lo mismo, guardarlos en Blogger.

¿Archivos con scripts? Fuera. Hay que agregarlos a la plantilla sí o sí. Esa tiene que ser la meta ¿Por qué? Porque nos evitará suplicios y porque ascelerará sustancialmente, el tiempo de carga del sitio ¿Hay excepciones? Sí. Todas las llamadas frameworks, librerías de usos múltiples que podemos cargar sin necesidad de alojar archivos mediante las API de Google. Para el resto, no hay motivo para usar archivos externos y menos aún, archivos externos que no alojamos nosotros mismos en alguna cuenta particular porque estaremos dependiendo de dos cosas, del servicio que las aloja y de la buena voluntad de quien las ha guardado allí.

¿Todos los scripts pueden agregarse a la plantilla? En principio, sí. Puede ser que algunos sean conflictivos y que debamos hacer algún pequeño cambio, eso habrá que verlo caso por caso y justamente, tenerlos en la plantilla nos permitirá hacerlo con más facilidad.

¿Archivos con hojas de estilo? Fuera. Van en la plantilla sin dudarlo, no hay ningún motivo para usar archivos CSS externos, ningún beneficio. Serán lentos de cargar, consumiran el ancho de banda del servicio que empleemos y cada vez que se nos ocurra cambiar un detalle, habrá que rehacerlos y volverlos a subir.

¿Las imágenes de la plantilla? Todas en Blogger y eventualmente en Picasa. El resultado será un aumento significativo en el tiempo de carga.

Scripts, hojas de estilo e imágenes son la base de cualquier plantilla; sólo hay tres tipos de archivos que suele haber en algunas plantillas y con los que no tenemos más alternativa que usar un alojamiento externo: archivos ICO, GIFs animados y SWFs. En esos casos, las opciones son múltiples y sólo enumero las que utilizo:
  • Fileden permite alojar casi cualquier tipo de archivo. Tiene 1GB de espacio disponible para una cuenta gratuita y un ancho de banda mensual de 5GB lo que es más que suficiente si no nos abusamos.
  • ImageShack permite alojar imágenes pero tambien SWFs y videos con alguna limitación en el tamaño. Para utilizarlo, hay que abrir una cuenta gratuita.
  • DivShare ofrece 5GB de espacio aunque no admite el enlace directo de los archivos; sin embargo, es una excelente opción para MP3s ya que se pueden insertar de forma individual o crear listas de reproducción. También admite videos, imágenes y documentos varios para los que provee slideshows y visores que pueden ser insertados en una página web.
  • Yahoo Geocities es otro sitio que permite crear páginas webs y que admite el alojamiento de archivos. Hay que ser prudente con su uso ya que el ancho de banda disponible es escaso pero puede servir para ciertos formatos de archivo que no son aceptados por otros servicios.
  • Google Sites: El "coso" de Google que no se sabe muy bien para qué fue creado pero que está allí con 100MB de espacio disponible y la posibilidad de alojar algunos formatos de archivos.
Probablemente, existan muchos otros; de hecho, existen muchos otros y la decisión de usar este o aquel es algo personal. Sólo recomendaria tratar de verificar esos servicios, saber si son proyectos que ya llevan tiempo funcionando o son emprendimientos nuevos. Leer que dicen otros usuarios es fundamental. Hay que ser cuidadosos porque no todo lo que reluce es oro.

Tweetbacks y Re-Tweets en Blogger

En BloggingTips explican una forma bastante simple de añadir Tweetbacks y Re-Tweets en las entradas de Blogger.

Un Re-Tweet es un tweet repetido y un tweetback es similar a un trackback (parece una explicación absurda pero no se me ocurre nada mejor). En fin, son los enlaces que recibe cierta entrada en el mismo Twitter. Con el tiempo, estos se estan volviendo "importantes" y hasta hay quien ha realizado un ranking de ellos y ha creado un sitio especializado.

Más allá de si esto sirve, nos gusta o sólo es otro contador de esos que se usan para alegrarse o amargarse, en WordPress hay plugins que los manejan y para usarlos en Blogger debemos editar la plantilla.

Hay dos modelos, el primero, es un script de Danzarrella que lista todos los tweets que hacen referencia a una entrada y que incluye el avatar del autor y el texto en si mismo.

Vamos a la Edición HTML de la plantilla, expandimos los artilugios y buscamos el lugar donde queremos que se muestre. Por ejemplo, entre la entrada y los comentarios:
<b:includable id='comments' var='post'/>
<script src='http://danzarrella.com/tb.js'//>
<div class='comments' id='comments'>
El resultado será una lista o bien un texto si no se encuentra ninguno:


Esto, sólo se verá en las páginas individuales y a mi entender retarda bastante la carga del blog. También puede agregarse el script directamente en la plantilla o alojarlo en un servidor propio. En este ZIP se encuentra el código fuente.

La segunda alternativa la provee un servicio llamado tweetmeme que permite agregar un botón donde se muestra la cantidad de tweets recibidos y a su vez, permite crear uno.

Para agregarlo, buscamos el lugar donde queremos que se vea (supongamos que es el mismo que el otro, entre las entradas y los comentarios) y allí agregamos lo siguiente:
<script type='text/javascript'>tweetmeme_url = &#39;<data:post.url/>&#39;;</script>
<script src='http://tweetmeme.com/i/scripts/button.js' type='text/javascript'> </script>
Por lo que vi, los resultados difieren del otro pero, todo puede ser.


Moraleja: no me convenció ninguno pero, esa es sólo una opinión personal verguenzaanim

A primera vista


REFERENCIAS:Poca Tinta

eeyore: el burro que maneja Blogger


Por si alguien no se enteró del asunto, durante varias horas, cientos de blogs se vieron invadidos por un epidemia. Aparecían posts publicados, eliminados o programados con un título que sólo era una serie de números y con un texto que decía esto: "eeyore is cute".

Obviamente, quienes se dieron cuenta (todavía hay decenas de ellos indexados en Google) procedieron a eliminarlos pero temieron lo peor ¿un hacker había entrado en sus cuentas? ¿un spyware se había filtrado en la PC? ¿Qué era esto? La verdad es que cualquier explicación era posible e imposible a la vez; sonaba demasiado "tonto" para ser un "ataque" y demasiado centrado en un servicio para tratarse de un virus. Cambios de contraseña, backups urgentes, temor, lo obvio, lo que nos pasaría a cualquiera de nosotros que de golpe ve que aparecen entradas que uno no realizó. Taquicardia, infartos, muchos calmantes.

Ayer, Blogger contesto más o menos rápido con una entrada en sus Known Issues:

"Some blogs are seeing a new post that says "eeyore is cute!"
We are identifying the cause of the problem and are working on a fix."

¿Trabajando en una solución? Epa, entonces ¿se trata de un error del mismo Blogger? No puede ser, sería una vergüenza. Eso no puede calificarse como error es ... una burrada inaceptable.

Y sí. Lo es. Increible, pero real. Bastante después, un par de actualizaciones a la misma entrada intentaban explicar lo inexplicable:

"Durante tests de rutina, un bug provocó que en un pequeño número de blogs que publican via FTP saliera una entrada de prueba. Ninguna cuenta ha sido hackeada. Se ha corregido el bug y se está trabajando en remover esos datos de los blogs afectados. Mientras tanto, re-publicar el blog corregirá el problema."

Y aún más tarde:

"También se vieron afectados usuarios que tienen marcada la opción de recibir la confirmación via email de lo que han publicado."

Aparentemente, ya todo está "solucionado" ... hasta la próxima vez, claro verguenzaanim

Lo bueno de esto es que ya sabemos un poco más sobre los desarrolladores de Blogger. Son admiradores de Winnie-the-Pooh y con eso, está todo dicho.

Wallpapers (Twitter)

Wallpapers (Twitter)

XUL MSN Messenger para Firefox

XUL MSN Messenger es un mensajero dentro de Firefox, una extensión que agregamos como cualquier otra y que crea una ventana independiente que imita la estética de Live Messenger y a través de la cual nos conectamos con el servicio sin necesidad de tener instalado el programa.

Al ser una extensión, tiene la ventaja de ser multiplataforma además de consumir muy pocos recursos y seguir funcionando, aún cerrando el navegador.

Obviamente, no posee todas las características del original pero la última versión ya integra la posibilidad de conversaciones con varios contactos simultáneamente y la transferencia de archivos. Está en inglés pero se comprende fácil. .

Lamentablemente, algunos usuarios no logran hacerlo funcionar pero es una versión experimental en la que mozdev.org viene trabajando hace años y vale la pena mirarla, aunque sea como curiosidad.


REFERENCIAS:ZonaFirefox

Todos contra todos

Solucionando cosas: Script de Posts Expandibles

k_nelita preguntaba si era posible colocar el script para crear Posts Expandibles directamente en la plantilla y como es uno de los más extendidos, aquí va la explicación.

Solemos verlo en nuestra plantilla mediante un código como este:
<script type='text/javascript' src='http://www.anniyalogam.com/widgets/hackosphere.js' />
Si bien es cierto que el script sigue funcionando, lo mejor, SIEMPRE, es tenerlo alojado nosotros. Lo podemos agregar a la plantilla usando el mismo criterio que usamos con las demás, colocando su contenido dentro de etiquetas SCRIPT:
<script type='text/javascript'>
//<![CDATA[
... aquí pegamos el contenido del archivo ...
//]]>
</script>
Como se trata de una serie de funciones, también podemos emplear un elemento HTML si creamos una sección especial en la plantilla para guardar scripts:
<!-- CONTENEDOR SCRIPTS -->
<b:section class='contenedorScripts' id='contenedorScripts' />
Allí agregamos el elemento y simplemente copiamos y pegamos el contenido de este archivo de texto

Alojando imágenes en Blogger

Ahora que todos estamos un poco concientes de la necesidad de tener un blog que dependa lo menos posible de sevicios externos, vale la pena reciclar cosas escritas alguna vez. Una de ellas es las imágenes.

Alba, comentaba hace unos días, que las imágenes las tenía alojadas en ImageShack. Le sugerí colocarlas en Blogger mismo porque me estoy volviendo un poco paranoico con este asunto y su pregunta fue ¿cómo se alojan en Blogger?

Obviamente, no estamos hablando de las imágenes de las entradas sino de las que usa la plantilla. Tampoco estoy diciendo que no debe usarse un servicio externo, sólo creo que es mejor tenerlas en Blogger porque a la larga, será más rápido y nos evitaremos colapsos indeseados.

Lo que debemos hacer para alojar imágenes que luego usaremos en la plantilla es aprovechar el editor de entradas, ya sea en un post existente o, mejor aún, en uno nuevo al que usaremos de borrador. Vamos a un ejemplo práctico.

Creo una entrada nueva y me ubico en Edición HTML ya que allí tendré que mirar para saber la dirección URL de la imagen. Click en el ícono y me aparecerán una serie de opciones.


Elige un diseño nos da cuatro posibilidades: poner la imagen centrada, flotando a la derecha, flotando a la izquierda o no darle formato. Vamos a elegir esta última aunque, en realidad, no importa.

Tamaño de la imagen tiene tres posibilidades: Pequeñas, Medio y Grandes ¿Qué significa esto? Lo mejor es verlo. Voy a subir la misma imagen cuyo tamaño original es de 600x200:

Tamaño Pequeñas:

Tamaño Medio:

Tamaño Grandes:

Me dará tres codigos similares pero diferentes donde elimino todo y me centro exclusivamente en lo único importante, la de la etiqueta IMG que contiene la URL:
<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://......./s1600-h/demoIMG.jpg"><img style="cursor: pointer; width: 200px; height: 60px;" src="http://......./sXXX/demoIMG.jpg" alt="" id="BLOGGER_PHOTO_ID_XXXXXXXXXXXXXX" border="0" /></a>
Si sólo me concentro en esa parte, tendré tres etiquetas "normales. Algo así:
<img src="http://......./s200/demoIMG.jpg" />
<img src="http://......./s320/demoIMG.jpg" />
<img src="http://......./s400/demoIMG.jpg" />
Ninguna de las tres se muestra tal como es la imagen original, la primera tiene 200 pixeles de ancho, la segunda 320 y la tercera 400. Aparentemente, han sido redimensionadas por Blogger pero, en realidad, eso no es del todo cierto, lo que está ocurriendo es que nos está mostrando tres miniaturas que se crean automáticamente al subirlas. No habrá diferencias si el ancho de la imagen no supera cierto valor pero si se trata de imágenes más grandes, no se mostrarán a menos que hagamos algo.

Si se fijan en esas etiquetas IMG, verán que son iguales con una excepción, hay un directorio que se muestra en el parámetro src que difiere:
src="http://......./s200/demoIMG.jpg"
src="http://......./s320/demoIMG.jpg"
src="http://......./s400/demoIMG.jpg"
Ese dato, es el que indica cuál es la miniatura a mostrar.

¿Y dónde está la imagen original? Por suerte, Google siempre usa el mismo criterio en todas esas cosas y las coloca en el mismo directorio pero con un nombre distinto, el s000 así que si la cambiáramos por:
src="http://......./s000/demoIMG.jpg"
veríamos esto:

Tamaño Original:

Da lo mismo usar s000 que s00 o bien s0:
src="http://......./s00/demoIMG.jpg"
src="http://......./s0/demoIMG.jpg"
Funcionará siempre que estemos en blogspot porque hay una restricción para quienes tienen dominios propios ya que nuestras imágenes son alojadas en Picasa y este, impide el hotlinking.

No son las únicas miniaturas disponibles, hay más:

s48, s64, s144, s150, s512, s640 e incluso, hay una que algunos utilizan para mostrar las imágenes en su tamaño real:
src="http://......./s1600/demoIMG.jpg"
pero esta en particular suele no funcionar en la plantilla.

En resumen, una vez que subimos la imagen y copiamos la URL que se encuentra el el atributo src, le cambiamos ese directorio, sea cual sea por s000 y ya tenemos la imagen disponible. Ahora, podemos hacer dos cosas, borramos el post y al hacerlo, le decimos que no borre la imagen, o lo guardamos como borrador para utilizarlo en cualquier otro momento.