No me apetece

0

Ahora mismo ... como que no me apetece volver a abrir el blog: pero mi hijo quiere entrar. Y a él le gusta.

Si hay alguien a quien no puedo negarle "casi" nada es a él. De manera que lo abriré ... mañana (como decía Scarlett O'Hara).

¿Las razones para cerrarlo?: A veces me canso de dar explicaciones y total ... es que ni merece la pena darlas. Así que, hagan apuestas, je merajuk
Leer mas >>


Y ... a ver lo que dura ...

2

... Esta plantilla nueva, sin que me canse de verla y retocarla hasta que termine siendo otra (para variar).

Si bien he partido de los archivos disponibles para Blogger, lo cierto es que no funcionaban la mitad de las características y he tenido que adaptarlas desde el theme de Wordpress:

.- El botón de "volver arriba" no funcionaba, salvo que eliminase cualquier otro query de la plantilla. De manera que he añadido un "jquery no conflict" al "UITop". Problema solucionado

.- Me ha ocasionado más de un quebradero de cabeza el tema de insertar la navegación desde la nube de etiquetas, porque mi ajax está bastante antigüo el pobre, aunque he conseguido que funcione.rindu

.- No me parece precisamente brillante la idea, en la plantilla original, de colocar las páginas en la cabecera, porque se han incluído dentro de lo que es el original menú de navegación, lo que hacía complicado insertar ambos widgets (ya que comparten la misma ID). Quizás hubiera preferido otro resultado, pero tendría que colocar del revés otra vez la plantilla y ... ya no me quedan ganas.

.- He añadido el thumbnail (de DinamicDrive, que ya lo tenía insertado en este blog, para otras funciones) para probarlo en imágenes (no cabe para otra cosa, ciertamente). Es una pena que no valga para ventana modal de comentarios, como la que tenía en la plantilla anterior de "Epílogo"

Y, bueno ... hay muchas cosas de la antigüa plantilla que he preferido quitar, por no sobrecargar el blog, que ahora va más rapidito. Hay otras cosas que no se ven, com algunas listas, y es que el css3 que ahora tengo por aquí, no me lo permite.

Lo próximo será retocar los comentarios, pero ... cuando tenga ganas ... ahora ya estoy un poqco saturada de tanto arreglar lantillas.

.- ¡Ah!: esas "siglas" que hay en la cabecera, bajo el contenedor de imágenes rotante, son para traducir este blog: ocupa poco espacio, queda muy sobrio (que es lo que me apetece ahora mismo) y funciona estupendamente (pero de la traducción de Google no respondo: faltaba más)

.- También he hecho clikable el link del número de comentarios, porque recuerdo que cuando yo era la única que los tenía arriba del título y encerrado el número CLICABLE por una imagen CLICABLE, había gente que no sabía cómo comentar. Valga la redundancia ... sin comentarios.
bising
Leer mas >>


New Labels Page by YJL

1

Antes de explicar nada, lo mejor es que veáis de qué se trata, de manera que os dejo, para empezar, la muestra: Labels, y ahora lo explicamos un poco:

Como véis, tenemos una lista de opciones con etiquetas, reunidas, cada una de ellas, bajo un nombre de bloque o descripción. Cuando hacemos click en alguna de esas etiquetas, se despliegan debajo las entradas contenidas en ella.
En resumidas cuentas, es una tabla contenidos por etiqueta, bastante más dinámica y completa que muchas de las que he visto por ahí.

He traducido este trabajo de Yu-Jie Lin al español, de manera que sea más accesible para quienes tenemos problemas con la lengua inglesa, y el resultado podéis verlo en este Blog de pruebas

Y vamos ahora al trabajo: Este índice se construye con query (lo sé: ahora muchos de vosotros estáis torciendo el gesto y pulsando la flecha atrás para salir de esta entrada) ... pero antes de nada, dejadme que aproveche para enseñaros las posibilidades de query, en mi photoblog, enteramente construído en query, ArsJuniaey en el que he incluído absolutamente de todo lo que se pueda ver en un blog de blogger (incluídos los emoticonos, que es algo difícil de ver en blogs con los nuevos comentarios anidados).

Así ha contruído Yu-Jie Lin su "Labels page":

.- En primer lugar, tenemos que crear una ueva página (id a "creación de entradas-editar páginas", para ñadir en su interior todo el códico y estilos que necesitamos:

Todo lo necesario para incluir en la página que vais a crear, lo obtenéis AQUÍ
Allí se dan perfectamente las explicaciones para crear vuestra página de etiquetas, pero si lo queréis en español, pues aquí dejo mi adaptación. Después de eso sólo tenéis que cambiar los estilos a las necesidades de vuestro blog y, obviamente, las etiquetas que han de contenerse en las "predefined labels", así como insertar la ID de vuestro blog y la de vuestro perfil de Blogger:



*(If you want this on your blog, please read [this post][instruction] for instructions.)*

[instruction]: http://blog.yjl.im/2010/11/my-new-labels-page.html

<div>
<!-- BEGIN: whole code -->
<!-- Last updated: 2011-02-15T01:18:15Z
Copyright 2010, 2011 Yu-Jie Lin
BSD License
-->

<!-- BEGIN: main code -->
<!-- Last updated: 2011-02-15T01:18:15Z
You can get the latest code at http://blog.yjl.im/p/labels.html

If the Last updated on your website is different than from the page above, then
you might want to update your main code.

If you already have jQuery loaded in your blog, you can omit the following line -->
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js'></script>
<script src="http://.../.../jquery/jquery.autocomplete.pack.js"></script>
<script>



Y ahora, el código principal (aquí no tenéis que insertar nada aún):

<!-- BEGIN: whole code -->
<!-- Last updated: 2011-02-15T01:18:15Z
Copyright 2010, 2011 Yu-Jie Lin
BSD License
-->

<!-- BEGIN: main code -->
<!-- Last updated: 2011-02-15T01:18:15Z
You can get the latest code at http://blog.yjl.im/p/labels.html

If the Last updated on your website is different than from the page above, then
you might want to update your main code.

If you already have jQuery loaded in your blog, you can omit the following line -->
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js'></script>
<script src="http://lilbtn.yjl.im/js/jquery/jquery.autocomplete.pack.js"></script>
<script>
function load_labels(callback) {
$('#search-labels-box-loader').hide();
$.getJSON("http://www.blogger.com/feeds/" + PROFILE_ID + "/blogs/" + BLOG_ID + "?alt=json-in-script&callback=?", function(data){
if (!data || !data.entry || !data.entry.category)
return;
window.LABELS = [];
var LABELS = window.LABELS;
for (var idx in data.entry.category) {
LABELS.push(data.entry.category[idx].term);
}
LABELS.sort();

var $ddl = $('#labels-ddl');
for (var idx in LABELS) {
$('<option/>').text(LABELS[idx]).val(LABELS[idx]).appendTo($ddl);
}

$('#search-labels-box').slideDown('fast');
// set up autocomplete
$('#labels-search-box').autocomplete(LABELS, {multiple: true});

if (callback)
callback();
});
}

function list_labels() {
var $labels = $('<ul/>').appendTo($('#blogger-labels-result').empty());
for (var idx in LABELS) {
var label = LABELS[idx];
$('<li/>')
.append(
$('<a/>')
.text(label)
.attr('href', '#')
.attr('label', label)
.click(function(){list_posts($(this).attr('label'))})
)
.appendTo($labels);
}
}

function list_posts(slabels, query, show_all) {
var $container = $('#blogger-labels-result');
if (query) {
var query_url = query + '&alt=json-in-script&callback=?';
}
else {
var _labels = slabels.split(',');
var labels = [];
for (var idx in _labels) {
if (_labels[idx].trim())
labels.push(encodeURIComponent(_labels[idx].trim()));
}
var MAX_RESULTS = parseInt($('#max_results').val());
// If it's 0, then set to 500
if (!MAX_RESULTS) {
MAX_RESULTS = 500;
show_all = true;
$container.empty();
}
var labels_part = labels.join('/');
if (labels_part)
labels_part = '/-/' + labels_part;
var query_url = "http://www.blogger.com/feeds/" + BLOG_ID + "/posts/summary" + labels_part + "?alt=json-in-script&callback=?&orderby=" + $('#orderby').val() + '&max-results=' + MAX_RESULTS;
}

if (!show_all)
$container.empty();

var $posts = $container.children('ul');
if ($posts.length == 0) {
$posts = $('<ul/>');
$container.append($posts);
}

$.getJSON(query_url, function(data) {
if (!data.feed.entry) {
$posts.replaceWith($('<span/>').text('No hay entradas.'));
return;
}
var summary_class = $('#show_summary').attr('checked') ? 'summary' : 'summary hidden';
var timestamp_class = $('#show_timestamp').attr('checked') ? 'timestamp' : 'timestamp hidden';
for (var entry_idx in data.feed.entry) {
var entry = data.feed.entry[entry_idx];
var link = "";
// Find the url of this post
for (var idx in entry.link) {
var l = entry.link[idx];
if (l.rel == 'alternate') {
link = l.href;
break;
}
}
var $li = $('<li/>')
.append(
$('<a/>')
.text(entry.title.$t)
.attr('href', link)
)
.append(
$('<span/>')
.addClass(summary_class)
.text(' - ' + entry.summary.$t)
)
.append(
$('<span/>')
.addClass(timestamp_class)
.text(' - ' + new Date(entry.published.$t))
)
.appendTo($posts);
}

// Check if there are next or prev links
var prev = '';
var next = '';
for (var idx in data.feed.link) {
var l = data.feed.link[idx];
if (l.rel == 'previous')
// Blogger API repeat labels, that causes problem
prev = l.href.replace(/-\/[^-]+/, '');
if (l.rel == 'next')
next = l.href.replace(/-\/[^-]+/, '');
}

if (show_all) {
if (next) {
list_posts(undefined, next, true)
}
else {
// Finish showing all posts
var total_results = parseInt(data.feed.openSearch$totalResults.$t);
$container.append(total_results + ' post' + (total_results==1?'':'s'));
}
}
else {
if (prev)
$container.append($('<a/>').html('« Anterior').attr('href', '#').click(function(){list_posts(undefined, prev)}));
var total_results = parseInt(data.feed.openSearch$totalResults.$t);
var start_index = parseInt(data.feed.openSearch$startIndex.$t);
var items_per_page = parseInt(data.feed.openSearch$itemsPerPage.$t);
var end_index = start_index + items_per_page - 1;
if (end_index > total_results)
end_index = total_results;
$container.append(' ' + start_index + '-' + end_index + ' de ' + total_results + ' entrada' + (total_results==1?'':'s') + ' ');
if (next)
$container.append($('<a/>').html('Siguiente »').attr('href', '#').click(function(){list_posts(undefined, next)}));
}
});
}

function show_summary_change() {
if ($('#show_summary').attr('checked'))
$('#blogger-labels-result .summary').removeClass('hidden');
else
$('#blogger-labels-result .summary').addClass('hidden');
}

function show_timestamp_change() {
if ($('#show_timestamp').attr('checked'))
$('#blogger-labels-result .timestamp').removeClass('hidden');
else
$('#blogger-labels-result .timestamp').addClass('hidden');
}

function append_to_search_box(label) {
if (!window.LABELS) {
load_labels(function(){append_to_search_box(label)});
return;
}
var $input = $('#labels-search-box');
if ($input.val()) {
if (/.*, *$/.test($input.val()))
$input.val($input.val() + ' ' + label);
else
$input.val($input.val() + ', ' + label);
}
else
$input.val(label);
}

function sort_alphabet() {
var $ul = $('<ul/>');
$('#blogger-labels-result ul li').sort(function(a,b){a=$(a).text();b=$(b).text();return a > b ? 1 : (a == b ? 0 : -1)}).appendTo($ul);
$('#blogger-labels-result ul').replaceWith($ul);
}

$(function() {
$('#search-labels-box').hide();
var $container = $('#blogger-labels-container');
var $predefined_labels = $('#predefined-labels');
var $predefined_labels_ul = $('<ul/>').appendTo($predefined_labels);
// List predefined labels
for (var idx_cat in PREDEFINED_LABELS) {
var cat = PREDEFINED_LABELS[idx_cat][0];
var cat_lbls = PREDEFINED_LABELS[idx_cat][1];
var $cat_ul = $('<ul/>');
for (var idx_lbl in cat_lbls) {
var label = cat_lbls[idx_lbl];
$('<li/>')
.append(
$('<a/>')
.text(label)
.attr('href', '#')
.attr('label', label)
.click(function(){list_posts($(this).attr('label'))})
)
.append(' ')
.append(
$('<a/>')
.html('↓')
.attr('href', '#')
.attr('label', label)
.click(function(){append_to_search_box($(this).attr('label'));return false;})
)
.appendTo($cat_ul);
}

$('<li/>')
.text(cat)
.append($cat_ul)
.appendTo($predefined_labels_ul);
}
});
</script>
<!-- END: main code -->

Vamos ahora al CSS: Aquí ya podéis empezar a cambiar lo que creáis oportuno

<!-- BEGIN: style -->
<!-- Last updated: 2011-02-15T01:58:15Z -->
<style>
@import url("http://lilbtn.yjl.im/css/jquery.autocomplete.css");
#blogger-labels-container {
color: #222;
}
#predefined-labels {
background-color: #CCC;
border-radius: 1ex;
padding: 1ex;
}
#search-options {
background-color: #CCC;
border-radius: 1ex;
padding: 1ex;
}
#search-box {
background-color: #CCC;
border-radius: 1ex;
padding: 1ex;
}
#blogger-labels-result {
background-color: #CCC;
border-radius: 1ex;
padding: 1ex;
}
#blogger-labels-result .hidden {
display: none;
}
</style>
<!-- END: style -->

Y, por fí, el HTML, donde hay que tener algún cuidado para no equivocarse

<!-- BEGIN: HTML -->
<!-- Last updated: 2011-02-15T01:58:15Z -->
<div id="blogger-labels-container">
<div id="predefined-labels">
Click en alguna etiqueta para mostar las entradas que contiene:</div>
<hr/><div id="search-options">
<div>
<label><input type="checkbox" id="show_summary" checked="checked" onchange="show_summary_change()"/> Mostrar resumen</label> •
<label><input type="checkbox" id="show_timestamp" checked="checked" onchange="show_timestamp_change()"/> Mostrar por fecha</label> •
<label alt="0 shows all posts" title="0 shows all posts">Mostrar <input type="text" id="max_results" value="20" size="3"/> entradas por pagina</label>
</div>
<div>
Seleccionar por <select id="orderby"><option value="published">Fecha de publicacion</option><option value="updated">Ultima por fecha</option></select>
o <input type="button" value="Por orden alfabetico" onclick="sort_alphabet()"/>de título de entrada .
</div>
</div>
<hr/><div id="search-box">
<div id="search-labels-box-loader">
<input type="button" value="Click para mas funciones" onclick="load_labels()"/></div>
<div id="search-labels-box">
<div>
<input type="button" value="List labels" onclick="list_labels()"/></div>
<div>
<input type="button" value="List posts labeled with" onclick="list_posts($('#labels-ddl').val())"/> <select id="labels-ddl"></select></div>
<div>
<input type="button" value="List posts labeled with" onclick="list_posts($('#labels-search-box').val())"/> <input type="text" id="labels-search-box" value=""/> (Separate by commas)</div>
</div>
</div>
<hr/><div id="blogger-labels-result">
</div>
</div>
<!-- END: HTML -->

<!-- BEGIN: settings -->
<!-- Last updated: 2010-11-27T07:17:21+0800 -->
<script>
/*
You should be able to get the following IDs from Blogger Dashboard
PROFILE_ID can be found in View Profile url
BLOG_ID can be found in links of a blog, e.g. NEW POST, Edit Posts, Comments, etc.
*/
var PROFILE_ID = '...';
var BLOG_ID = '...';
// Be careful when adding commas if you don't know about JavaScript.
var PREDEFINED_LABELS = [
['Integro', ['El Secreto de Leire', 'Contenidos', 'Comienzos', 'Comento']],
// ^ This one is a label
// ^ they are labels ^^ no commas
['Repetimos', ['Contenidos', 'Comienzos']],
['Poesia', ['Clásicos']],
// ^ need comma
['Musica', ['Tono']]
// ^ no comma
];
</script>
</script>
<!-- END: settings -->
<!-- END: whole code -->
<!--
## Changelog

* 2010-11-27T07:17:21+0800: Add more options for visitor to use, including showing/hiding summary/timestamp, how many posts a page, sorting field, and list all matched posts with one click.
* 2011-02-15T01:58:15Z:
1. Fix text color on Dark theme.
2. Make show/hide summary and timestamp doesn't need to re-query.
3. Fix scroll to top after appending a label to labels box
4. Fix unable to list all posts when no label entered
5. Fix comma and space prepend label when appending and these is no label entered previously
-->
</div>


Y ahora vamos a mirar más despacio esta parte: Os he dejado mis "etiquetas predefinidas" para que tengáis una idea de la estructura y de cómo hay que colocarlas. Hay un "contenedor" principal al que debéis poner nombre (por ejemplo, si trabajáis fotografia, llamad así al contenedor y, dentro, las etiquetas con el tipo de las fotografías que lleven el nombre de vuestras etiquetas, p.e. "paisaje", "urbano", animales" ...). Fijaros en que ya se os advierte, a la hora de introducir las etiquetas, cuando debéis poner una coma detrás y cuando no. Y no olvidéis introducir la ID de vuestro blog (podéis verla cuando entráis en "diseño-edición de HTML": Os aparecerá en la barra de navegación del explorador) y la ID de vuestro perfil de Blogger (entrad en el "Escritorio" de Blogger y pinchad en vuestro perfil).

Y creo que no hay más que explicar ni decir: y si tenéis alguna pregunta, Yu-Jie Lin, el autor de este trabajo, estará encantado de responderos (pero escribidle en inglés, por favor.)
Leer mas >>


No es un testamento

6

No hay tiempo para todo... entre el trabajo y mi pequeña familia, apenas tengo siquiera tiempo para dormir un máximo de cinco horas cada noche.


Por otra parte, me gusta demasiado el Arte Digital como para evitar caer en la tentación de jugar con "Incendia" o "Vue" en cuanto tengo una hora libre. Y es que quizás alguien no sepa aún que he jugado con mucha desventaja en este cyber-mundo y en el de aquí fuera, durante ... ya ni me acuerdo cuánto tiempo, porque se me ha hecho tan largo .... Y creo que ya va siendo hora de reivindicarme a mí misma:



.- Hace unos tres años me diagnosticaron Degeneración Macular Miópica. He pasado por múltiples hemorragias subretinianas, tratamientos con láser frío y caliente, fotodinámicas, angiofluorescengrafías ... me han operado cuatro veces: cirugía de catarata (patológica) una en cada ojo, más cirugía para reemplazar una lente intraocular, que me dejó con visión de cerca nula, y otra operación para extraerme el cristalino, que se rompió en mil pedazos en la primera cirugía de catarata, lo que conllevó, además, que se me hubiese de practicar una vitrectomía. He pasado por un desprendimiento de retina y por una subida de tensión intraocular tan fuerte que en la misma consulta de mi oftalmólogo y "a lo vivo" (sion anestesia ni previo aviso) tuvieron que sajarme el ojo con un bisturí, para aliviar la presión.

Y, como me dijo una vez un oftalmólogo con mo mucho corazón: "tengo la espada de Damocles sobre la cabeza". Porque terminaré por perder la poca visión central que me queda (de hecho ya tengo un ojo perdido). Pero llevaba razón: porque mi Degeneración Macular es la más agresiva. La peor: por todo el tejido cicatricial que "los reventones" de membranas neovasculares, las manchas de Fuchs y el láser van dejando en mis ojos, matando a su paso el nervio optico... porque después de la cirugía de catarata tengo la presbicia de una persona treinta años mayor que yo... porque soy muy joven para tanto desastre.


Y, sin embargo, si mne véis por la calle, no notaréis nada: No llevo gafas (de sol, sí: porque la luz me hace mucho daño) nadie en mi trabajo sabe lo que me sucede. Pero igual sospecháis algo si me véis abrir la puerta de mi casa sin siquiera mirar la cerradura... o cambiando las bombillas mientras palpo con la otra mano el enganche... o intentando enchufar un electrodoméstico tres y cuatro veces hasta que lo consigo ... cuando se va la luz, quedándome tan tranquila y paseando por mi casa sin darme un sólo golpe contra los muebles (aunque con la luz encendida, sí: estoy llena de moratones, porque ya no tengo cálculo de distancia ni perspectiva) ... o tardando siglos en escribir algo, porque me lleva más tiempo corregir las faltas ocasionadas por las zonas ciegas que la propia redacción...

Por todo ello, a pesar de mi 79% de minusvalía, no me considero menos válida que nadie: me cuesta más, pero hago lo mismo ... o más.


He pasado tanto, tanto, tanto ... que llegó un momento en que dejaron de importar cosas pequeñas... pequeñas como cada crítica que recibía por usar librerías (mootools, query ...) por ejemplo, cuando lo único que yo pretendía era estudiar, aprender y enseñar ... porque me gusta. Sin más. Pequeñas decepciones como ver que aquéllos que habían aprendido algo en "esta casa" eran los primeros en dar la espalda... pequeñas porque, a fín de cuentas, la gente que importa es la que ves cada día junto a tí.


Pero sí fue decepcionante todo ello... sobre todo cuando veía (je... qué ironía lo del "veía" :-) ) que mis ojos empeoraban día a día... pero en vez de quedarme sentada, hice lo que siempre hago: "huir" hacia adelante. Y comencé a dibujar de nuevo, aunque ya no podía hacerlo en papel o lienzo, como antes.

Y un día me "atreví" a entrar en Deviantart, la más grande cuna de artistas que conozco. Y comenzaron a animarme, después a subir mis trabajos a "favoritos", mostrarlos en "journals", otorgarles "faves"... y llegaron dos Daily Deviation, y premios a la mejor fractal del mes y ... peticiones para mostrar mis trabajos en otros blogs; y para usar mis trabajos en conferencias, en universidades europeas, sobre relaciones entre el Arte Digital y la arquitectura; y acabo de enviar una entrevista para ser publicada en una revista ...


Y no puedo pdir más: todavía me resulta increúble el apoyo que me ha dado tanta gente, de tantos países ... hasta el punto de preguntar periódicamente por mis ojos ... hasta el punto de tener la confianza suficiente como para contarles a ellos hace mucho tiempo lo que hasta ahora no he contado aquí.


Les debo muchísimo... les debo parte de la fuerza que aún me impulsa a escribir, aunque apenas veo lo que escribo (este mes tengo en perspectiva un nuevo tratamiento con láser ... espero que me alivie algo) y aún a seguir dibujando píxeles.


Como les debo a ellos, también a Brainiac... (te echo de menos) :)
Cuando me preguntaba a mí misma si perdía miserablemente el tiempo intentando enseñar a otros lo que aprendía, ahí estabas tú: con una sed de conocimientos, de ganas de saber... que me recordaba que yo estaba aquí por tí, por gente como tú, aunque sólo fueras tú.

No sé si alguna vez te dí las gracias, Brainiac... pero si lo hice, seguro que no fue bastante. Y lo malo es que no sé cómo hacerlo, salvo deseándote que tu vida sea fabulosa y que estés disfrutando de ella. Espero que estés siendo muy, muy feliz.


A todos los demás ... no tengo nada que reprochar... nada que perdonar... porque cuando una aprende a verse bien, completa y clara en un espejo, con todos sus defectos y vitudes, cuando una se conoce bien y sabe lo que puede y no puede esperar de sí misma... lo demás se hace tan relativo ...

Tan sólo que yo he aprendido, imagino que a fuerza de golpes, que no somos nadie para juzgar a neadie... menos aún sin conocerlos ni conocer sus particulares circunstancias.

He hecho cosas bien, otras regular, otras francamente mal... y si bien me arrepiento de las últimas, también me han enseñado lo que debo corregir. Y eso es bueno. Para mí, es bueno. Porque perdonarse a uno mismo y corregirse es crecer.


Y ésto no es un testamento :) ... porque ni voy a "pass away" en un futuro próximo (que yo sepa, claro, je), ni espero perder la poca vista que me queda ... al menos en breve. Pero ... por si acaso... porque la vida me ha mostrado que es tan-tan frágil....


Y, por si acaso el mes que viene no puedo escribirlo: me llamo Pilar ... o Llara, para mis amigos... soy María del Pilar Lozano Santos. Y Juniae para mis chicos de Deviantart. Y he sobrevivido a tanto dolor, tantas injurias, tantas mentiras ... que mi mejor amiga dice que si un día me decido a contarlo todo tendré que mentir y decir que "los personajes y los hechos son ficticios"... porque nadie que no me conozca y no sepa que yo jamás miento (porque no sé ni puedo) podría creerme ...
Leer mas >>


Lettering.js

0

Y seguimos probando cuantas fórmulas se inventan y reinventan para optmizar los textos y arreglarlos a nuestra manera.

Tengo que decir que el sistema que prefiero sobre todo es "Cufon". Pero Lettering.js tiene tantas posibilidades como podáis imaginar: insertar fuentes poco habituales y diseñar cada letra, cada palabra o grupo, cada línea ... jugando con los tamaños, sombras, tipos de fuentes ...


Para mí tiene dos problemas:

.- Usa query, lo que puede resultar bastante obstructivo (a pesar de los "jquery no conflict")

.- Resulta algo complicado de insertar (por lo que se refiere al CSS: el HTML se construye a base de "span")

Y, en fín: podéis ver los increíbles ejemplos que nos muestran en la página del autor y el que he construído yo basándome en ésta y que podéis ver en la cabecera de este blog

Bueno: vamos a ver cómo puedo explicarlo de forma sencilla:

Scripts:

Lettering. js

Por si vuestros lectores no tienen Javascript emsamblado, casi mejor que os descargáis la versión "min" del script, que es la que he usado yo en mi prueba. De forma que esta parte iría así:


<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js'/>

<script src='https://sites.google.com/site/.../Inicio/jquery.lettering-0.6.1.min.js'/>

<script type='text/javascript'>

$(document).ready(function(){

$(&quot;.header h1&quot;).lettering();

});

</script>


Podéis ver que el último script es el que lleva la definición sobre la que queréis apicar el efecto, en este caso "header h1", pero podría ser "#logo", "h2" o todas ellas (pero en líneas separadas)

Vamos con el CSS:

Antes de nada, decir que casi mejor que uséis en la plantilla un "reset" para el CSS.



h1, h2, h3, h4 { }
h1 { font-size: 48px; text-transform:capitalize; margin-bottom: 0em; }
h2 { font-size: 28px; margin-bottom: 0.5em; }
h3 { font-size: 34px; margin-bottom: 0.5em; }
h4 { margin-bottom: 0.5em; }


Este es un ejemplo sencillísimo, que lo que hará es "ordenar" al script que coloque diferentes tamaños para cada selector y la posición que ocuparán. Pero se puede complicar mucho más:

Imaginemos que queremos un color distinto para cada letra de una palabra (título de entrada o título del blog y colocar cada letra, además de proporcionarles sombras, marcarles los espacios, un "hover", etc ...



.header h1{font-weight: normal;text-transform:capitalize;font-family: Diamond Gothic;font-size:65px;margin-bottom:-32px;margin-left:10px;color:#999999;text-shadow:#863027 -4px 4px 0;margin-top:30px;}
.header h1 span{display:inline-block;position:relative;letter-spacing:-1px;-webkit-transition:all 0.2s ease-out;}
header h1 span:hover{top:3px}
.header h1 .char2, .header h1 .char11{color:#e36b23;text-shadow:#9b4d1f -4px 4px 0}
.header h1 .char3, .header h1 .char10{z-index:10;color:#e6c92e;text-shadow:#9c8b26 -4px 4px 0}
etc ...


Obviamente, cuando queremos introducir tantas variables, el css se complica (que me lo digan a mí, que se me da fatal, je)

La definición "char" se refiere al carácter y el ´número que ocupa en la palabra, de forma que "char1" es a primera letra de la palabra, "char2" la segunda, y así sucesivamente.

Y vamos al HTML:

<h1 id="header h1"><span class="char1">J</span><span class="char2">u</span><span class="char3">e</span><span class="char4">G</span><span class="char5">o</span><span class="char6">-</span><span class="char7">O</span><span class="char8">s</span></h1>


Aquí le decimos al script que queremos unas letras más grandes y otras más pequeñas, por ejemplo.

En fín... que se puede hacer prácticamente todo lo que uno quiera. Y a las pruebas me remito, a la vista de los increíbles ejemplos que muestra Lettering. js en su página, respecto a lo que otros usuarios han hecho con el script.

En el título de la página del hack, a la derecha, tenéis el enlace para descargar los archivos: os llevará a otra página donde tenéis ejemplos de HTML y CSS. Arriba del encuadre de estos ejemplos, podéis ver un "downloads", donde podéis descargaros la versión "min" del script.
Leer mas >>


Chrome Frame para Explorer

0

Hay cosas en este mundo que nunca lograré explicarme, como el hecho de que exista una "especie de extensión" para Internet Explorer (6, 7 y 8), que procede de ... Chrome.

Chrome frame "moderniza" IE, comenzando por agilizar el navegador, de forma que las páginas se abren como un tiro, con la rapidez que caracteriza al actual navegador Chrome. Sólo que no es Chrome, sino IE con añadidos Chrome.


Lo siento en el alma, pero es que no soy capaz de explicarlo de otra manera :(


Lo cierto es que Chrome Frame permite que quienes seguimos fieles a Explorer (qué cosas hacen el amor y la costumbre ...) no nos durmamos mientras intentamos pasar de una página a otra y ... ¡oh sorpresa!, que algunos CSS3 y HTML5 que nuestro pobrecito Explorer jamás vio, ahora se "manifiesten", como por obra de birlibirloque, más de bien de Chrome Frame.

¿Que porqué semejante invento no se incluye sin más en Explorer, sin falta de tener que "adosar" Chrome Frame?: Ni idea: he leído por ahí unas cuantas explicaciones, pero me resultan tan incomprensibles como a Horacio las palabras de Hamlet: "Hay más cosas en el cielo y la tierra, Horacio, que las que sospecha tu filosofía." ;)
Leer mas >>


Bumpbox

3

Probando en este blog de pruebas la Bumpbox de ArtViper

Es rápida, limpia, puede "leer" imagen, vídeo, flash... completa, completa... es de las lightboxes que más me han gustado hasta ahora ... pero me ha costado un congo entender cómo funcionaba en blogger el "pathIcons" del archivo js, uuuuuufffffffff ...

¡Ah!: Y usa Mootools. :)

-------------------------------------------



Vale: explico ...

Para bajar la documentación, scripts y demás, al final de la página de ArtViper que he colocado arriba de esta entrada, tenéis el enlace de descarga: cuando pincháis en "download", se os dirige a otra página, en la que se os pide vuestra dirección de e-mail y que marquéis el hack que os interesa descargar. Una vez hecho ésto, ya podeis abrir vuestro ZIP y comenzar a trabajar para implementar vuestra bumpbox.

Bumpbox puede ser muy compleja o muy simple, dependiendo de para qué querais utilizarla: soporta imágenes, swf, PDF, MP3, HTML ... y es la lightbox más rápida que conozco hasta ahora.


De momento, yo sólo la he probado con imágenes ... y también la utilizo para abrir la ventana de comentarios :)

Recordad, como todas las lightbox, que a la hora de implementarla, tenéis que darle un nombre a la clase (yo tengo uno para la galería de imágenes que he colocado de prueba y otro para la ventana de comentarios).

El Css es muy importante, para variar, pero ... ¡¡OJO!!: a la hora de colocar las imágenes de cierre, adelante, atrás, fondo y demás de la bumpbox, es necesario que abráis el script "bumpbox.js", porque en su interior es dónde tendreis que colocar todo ello. Con el Zip vienen un pack de iconos que podéis usar. Pero si queréis usar vuestros propios iconos, aseguráos de que el pack esté dentro de la misma carpeta en que tenéis la bumpbox.

Colocad el CSS dentro de la hoja de estilos de vuestro blog y los scripts antes del cierre head de la plantilla. en cuanto al HTML, nada más fácil: coloca la imagen, el "rel" con el tamaño de la caja y la clase. Podéis introducir también un título (que aparecerá debajo de la caja, en el margen inferior izquierdo):


<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://.../s1600/falla1.jpg" class="bump" rel="800-600"title="falla1"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 218px;" src="http://2.bp.blogspot.com/.../s320/falla1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_..." /></a>


Y creo que eso es todo ... lo cierto es que tiene tantas posibilides que creo que no terminaría de explicarlas en la vida (el nombre para dar a la clase, el efecto de velocidad de la caja, color, opacidad, radio de los bordes, transiciones ... )
Leer mas >>



No recuerdo ni cómo me llamo ...

0

después de este fín de semana "diabólico" en el que no he parado de trabajar: niño. fútbol, buscar scripts, arreglar scripts, desesperarme porque han desaparecido el hack y el autor, tirarme del pelo porque se me ocurrió hacer un link con el css y se me han ido a la porra el servidor, el link y la plantilla en cuestión ... desaparecida para siempre ... (imagino que a su autor no le gustaba el resultado, pero a mí sí nangih)



Trabajo diseñado y renderizado con Vue.Y sigo : renderizar mi último "Vue", echar un vistazo rápido al correo, limpiar las ventanas y el polvo de mi casa (qué mal podrían hacer un par de ácaros? gelakguling ) y ... (maldición) se me olvidaba preparar unas cuantas notificaciones para dejarlas mañana en la Oficina de Correos después de firmar en el Juzgado.


Y yo que pensaba acostarme pronto... no hay forma.


Bueno: Pues que he intentado arreglar TODOS los scripts de todos mis blogs de prueba, pero ... no: hay muchos hacks que su autor ha "desaparecido", imagino que hasta las narices de tener que andar cambiando de servidor cada dos por tres, como el resto. Pero la mayoría están arreglados.

Por otro lado (menuda gracia) Ning, se ha cargado todas las páginas de aquellos a los que no nos ha dado la gana de pagar. Y es que, no me parece de recibo ofrecerte una página y alojamiento gratuítos, sin límite de tiempo, para que, al cabo de un par de años te manden uun correo diciendo que ahora se paga, y que si no pagas se cargan tu página. Fabuloso... pero a mí no me van los chantajes, aunque pierda hasta la camisa.

Así que ... todas las plantillas que había alojado en Ning están ... "missing"... lo siento (aunque casi mejor debieran sentirlo los responsables de semejante "expolio".

Que me quedo dormida sobre el teclado... cuando pueda disponer de otro rato, intentaré contestar los mensajes que aún tengo pendientes... si es que no doy a basto ...
Leer mas >>


Deciamos ayer ....

2

Ha pasado mucho-mucho tiempo desde mi última entrada... quizás demasiado...


Pero hay muchos cambios fuera de esta "pecera" y aún me estoy adaptando a ellos. Para empezar, me he pasado al 9Beta de IE, en el que compruebo algunos cambios a mejor, de los que intentaré hablar en algún momento.

Estoy intentando contestar todos los comentarios que me quedaron pendientes y ... no he probado muchos hacks en este tiempo, a no ser el de "entradas populares" y colocar resúmenes de las entradas en cada página del blog; a parte de un muñeco-burbuja en canvas (lo ví hace poco, buscando otra cosa y ... ¡me encantó!). Todas estas cosas las he ido probando en un blog que he construído para unos estudiantes de último de primaria y que podéis ver aquí : Informaníacos

Por otro lado, DeviantArt me tiene muy absorbida: en este tiempo he obtenido dos Daily Deviation por dos de mis trabajos con Incendia; un premio al mejor Daily Deviation del mes ... y numerosos premios a la mejor fractal del día, del mes, tropecientos "features" ... Además, dos personas me han regalado cinco meses de "premium" para mi cuenta, una de ellas me ha comprado uno de mis trabajos y ... me han solicitado tres de mis trabajos para incorporarlos a una conferencia sobre Incendia y Arquitectura que tendrá lugar en Italia: mis trabajos se expondrán en la conferencia y en un periódico que expondrá el contenido de ésta, además de en un CD y una web...

Es increíble que en un año y pico me hayan pasado tantas cosas buenas en Deviant Art... teniendo en cuenta que somos algo más de un millón de personas de todo el mundo, y unos doce millones de trabajos allí expuestos ... y que el arte fractal aún no es ni muy conocido ni muy valorado; aunque ésto está cambiando desde la aparición en todos los diarios de la vida y muerte de Benoit Mandelbrot, a quien le debemos la primera fractal (Mandelbrot) y el haber confirmado que las matemáticas son poesía y arte (y yo siempre he amado las matemáticas).

Y bien ... mientras sigo construyendo ciudades y edificios con Incendia y Mandelbulb 3D, y creándoles paisajes con Vue ... intentaré comenzar a encontrar ratitos para no dejar este blog muy abandonado.

¡Gracias a todos los que habéis tenido paciencia y habéis seguido este "periódico" de hacks! tepuktangancium
Leer mas >>


INCENDIA (Programa de creacion de fractales)

4

Llevo unos días algo "missing", porque estoy ocupada en el grupo de fractales de deviantart (ocupada y encantada :D



Otra de las cosas buenas que he encontrado allí (a parte de una acogida maravilosa), es un programa de creación de fractales llamado INCENDIA. Son fractales en 3D que resultan más espectaculares, incluso, que Apophysis: porque el programa tiene la capacidad de añadir polígonos, poliedros, sombras, efectos de luz, transformaciones, perspectivas, fondos con textura y... etc, etc, etc...

Es fácil de manejar cuando te haces con él, y la apariencia del editor es sencilla, aunque a la hora de manejarlo es algo más compleja de lo que parece, más que nada por la cantidad de funcionalidades que ofrece.
En el vínculo que os he puesto arriba, podéis descargar el programa, que viene en ejecutable ("exe"), de manera que os recomiendo que lo guardéis con esta extensión.

En una ventana del asistente de INCENDIA, os preguntará donde queréis guardar las filas de parámetros de vuestras imágenes, así como el resultado de la renderización de éstas: yo he optado por guardarlas en una carpeta del archivo "Documentos", pero es opción de cada quién.

Las imágenes se "salvan" en mapa de imágenes, pero al renderizarlas podéis añadirles la extensión JPG (ésta y no otra, porque si colocáis un fondo a la fractal se os pierde en png).

Y, así, "grosso" modo", os doy unas pistas para usar INCENDIA... igual otro día vuelvo al tema para explicar algo más. Mis fractales de esta entrada las diseñé con INCENDIA.
Leer mas >>


Mis fractales en deviantart

1

Llevo sólo una semana de alta en deviantart y... aún no me ha dado tiempo a configurar ni mi perfil, ni mis favoritas, ni mis "añadidos", ni... nada: tengo mi presentación prácticamente en blanco, salvo por lo que hace a las fotos que he subido a mi galería en deviantart.


Debe ser la primavera... porque tengo una pereza tremenda, tanto para buscar cosas nuevas para Epílogo, como para diseñar más fractales pero, en este último caso, nunca me falla el hacer una visita a las últimas fractales subidas por otras personas, porque hay tantas bellezas juntas que es imposible que no me entren las ganas de volver a mi editor Apo.

Acabo de entrar en mi perfil y veo cinco mensajes de miembros de deviantart que escogen cuatro de mis fractales para sus galerías de "All Time Favorites", "Favourites" y "Beautiful Fractals": Mi fractal "Blind", que uso en deviant también como avatar y que, creo, que he puesto por aquí, acompañando a alguna entrada, me la han incluído en dos galerías...

Y bueno... con lo que me gustaba a mí dibujar y ahora diseñar fractales... pues que estoy contentísima de que alguien las escoja para su galería... tan contenta y sorprendida que no sé si he sido capaz de darles las gracias tal y como lo siento... y en un inglés medianamente comprensible, jajajjaa... porque siempre me parecen poca cosa mis fractales en comparación con las cosas alucinantes que veo allí... que siempre me dejan con la boca abierta de admiración.

Bueno... pues espero que así se me abran las ganas de volver al diseño :D
Leer mas >>


Avanzando CSS3

0

Si no fuera por los navegadores.. qué buena cosa serían los navegadores ;)

Y es que, en cuanto a CSS3 se refiere, sigue habiendo diferencias abismales. Por ejmplo: IE sigue sin enterarse de lo que pasa (es decir: para el explorador de Gates el CSS3 como si no existiera). En cuanto a bordes redondeados conjuntados con sombras, casi no se percata un solo navegador, a excepción de Safari, pero... hay algunas cosillas que van bien para casi todos los navegadores (y en el "casi", siempre se incluye IE). Por ejemplo:

Teniendo en cuenta los conflictos que a veces nos crea query en la plantilla, no viene nada mal tener un sustituto ligerito y nada conflictivo para crear columnas:


Había una vez, un barquito chiquitito. Había una vez, un barquito chiquitito, que no sabía, que no podía, que no sabía navegar. Pasaron un, dos, tres, cuatro, cinco, seis semanas. Pasaron un, dos, tres, cuatro, cinco, seis semanas. Y aquél barquito, y aquél barquito, y aquél barquito navegó. Y si esta historia parece corta, volveremos, volveremos a empezar: Había una ve un barquito chiquitito...



Y lo obtenemos mediante estos parámetros CSS3:

<div style="border: 5px solid #151515; padding: 15px 25px; height: inherit; width: 350px;">

<p style="text-align: justify; -moz-column-count: 3; -moz-column-gap: 1.5em;-moz-column-rule: 1px solid #dedede; -webkit-column-count: 3; -webkit-column-gap: 1.5em; -webkit-column-rule: 1px solid #dedede;">Había una vez, un barquito chiquitito. Había una vez, un barquito chiquitito, que no sabía, que no podía, que no sabía navegar. Pasaron un, dos, tres, cuatro, cinco, seis semanas. Pasaron un, dos, tres, cuatro, cinco, seis semanas. Y aquél barquito, y aquél barquito, y aquél barquito navegó. Y si esta historia parece corta, volveremos, volveremos a empezar: Había una ve un barquito chiquitito... </p></div>



Y ahora, queremos unos bordes redondeados:


Esta caja tiene 5 píxeles de borde "normal y 15 píxeles de "border radius".


Que podemos obtener así:

<div style="border: 5px solid rgb(222, 222, 222); padding: 15px 25px; font-family: Arial; -moz-border-radius-topleft: 15px; -moz-border-radius-topright: 15px; -moz-border-radius-bottomright: 15px; -moz-border-radius-bottomleft: 15px; height: inherit; width: 350px;">

<p><strong>Esta caja tiene 5 píxeles de borde "normal y 15 píxeles de "border radius".</strong></p></div>


Quizás un día nos veamos libres de tener que usar javascript para conseguir estas cosas y que desde cualquier navegador se puedan apreciar...

De momento, más cosillas (que nos ponen los sientes largos a quienes no usamos Safari) en
Leer mas >>


Plantilla Neo

0

Actualizo:

Ya que (s.e.u.o.) "mi Neo" es la única que conozco que se haya traducido al español. voy a dejar aquí el script Neo.js que he "españolizado", por si alguien prefiere tener en su blog los links de Neo en este idioma, en lugar de en inglés:

<script language='javascript'>

// This file is part of the Neo template. As I spent quite some time developing

// this code, please give proper credits to Hackosphere if you are going to

// re-use the code.

// - Ramani@hackosphere



var postTitle = new Array();

var postContent = new Array();

var postId = new Array();

var postDate = new Array();

var postPermalink = new Array();

var commentAuthor = new Array();

var commentContent = new Array();

var commentDate = new Array();

var blogid, blogurl, totalComments;

var monthnames = new Array();

var startIndex = 1;

var oldestFirstOrder = 0;



function dateString(rawdate, needYear) {

monthnames[1] = &quot;Enero&quot;;

monthnames[2] = &quot;Febrero&quot;;

monthnames[3] = &quot;Marzo&quot;;

monthnames[4] = &quot;Abril&quot;;

monthnames[5] = &quot;Mayo&quot;;

monthnames[6] = &quot;Junio&quot;;

monthnames[7] = &quot;Julio&quot;;

monthnames[8] = &quot;Agosto&quot;;

monthnames[9] = &quot;Septiembre&quot;;

monthnames[10] = &quot;Octubre&quot;;

monthnames[11] = &quot;Noviembre&quot;;

monthnames[12] = &quot;Diciembre&quot;;

var year = rawdate.substring(0,4);

var month = rawdate.substring(5,7);

var day = rawdate.substring(8,10);

str = monthnames[parseInt(month,10)] + &#39; &#39; + day;

if (needYear) str = str + &#39;, &#39; + year;

return (str);

}



function updateLabelPosts(json) {

feedid = json.feed.id.$t;

start = feedid.indexOf(&#39;blog-&#39;);

blogid = feedid.substr(start+5);



for (var k = 0; k &lt; json.feed.link.length; k++) {

if (json.feed.link[k].rel == &#39;alternate&#39;) {

alturl = json.feed.link[k].href;

break;

}

}

index = alturl.lastIndexOf(&#39;/&#39;);

var label = alturl.substr(index+1);

label = decodeURIComponent(label);



var labelposts = document.getElementById(&quot;LabelPosts&quot;);

var labeltitle = document.getElementById(&quot;LabelTitle&quot;);



if (label == &quot;&quot;) {

labeltitle.innerHTML = &#39;&lt;h2&gt;Recientes&lt;/h2&gt;&#39;;

} else {

labeltitle.innerHTML = &#39;&lt;h2&gt;Entradas bajo la etiqueta &quot;&#39; + label + &#39;&quot;&lt;/h2&gt;&#39;;

labeltitle.innerHTML = labeltitle.innerHTML + &#39;&lt;img style=&quot;border: 0pt none;&quot; src=&quot;http://www.feedburner.com/fb/images/pub/feed-icon16x16.png&quot;/&gt;&amp;nbsp;&#39;;

labeltitle.innerHTML = labeltitle.innerHTML + &#39;&lt;a href=&quot;&#39; + blogurl + &#39;feeds/posts/default/-/&#39; + label + &#39;&quot;&gt;Subscribir&lt;/a&gt;&lt;hr/&gt;&#39;;

}

var disp = &#39;&#39;;



for (var i = 0; i &lt; json.feed.entry.length; i++) {

var entry = json.feed.entry[i];

var selfurl;

postTitle[i] = entry.title.$t;

postContent[i] = entry.content.$t;

postDate[i] = entry.published.$t.substring(0,10);

entryid = entry.id.$t;

start = entryid.indexOf(&#39;post-&#39;);

postId[i] = entryid.substr(start+5);



for (var k = 0; k &lt; entry.link.length; k++) {

if (entry.link[k].rel == &#39;alternate&#39;) {

postPermalink[i] = entry.link[k].href;

break;

}

}



disp = disp + &#39;&lt;a href=&quot;javascript:updatePost(&#39; + i + &#39;);&quot;&gt;&#39; + entry.title.$t + &#39;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&#39;;

}

if (label == &quot;index.html&quot;) label = &quot;&quot;;

disp = disp + &#39;&lt;p class=&quot;navLinks&quot;&gt;&#39;;

if (startIndex != 1) {

disp = disp + &#39;&lt;a href=&quot;javascript:fetchNewerPosts(\&#39;&#39; + label + &#39;\&#39;);&quot;&gt;&lt;&lt;&amp;nbsp;Newer&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#39;;

}



if (json.feed.entry.length == numPosts) {

disp = disp + &#39;&lt;a href=&quot;javascript:fetchOlderPosts(\&#39;&#39; + label + &#39;\&#39;);&quot;&gt;Older&amp;nbsp;&gt;&gt;&lt;/a&gt;&#39;;

}

disp = disp + &#39;&lt;/p&gt;&#39;;

labelposts.innerHTML = disp;

}



function updatePost(index) {

var datediv = document.getElementById(&quot;PostDate&quot;);

var titlediv = document.getElementById(&quot;PostTitle&quot;);

var contentdiv = document.getElementById(&quot;PostContent&quot;);

var editdiv = document.getElementById(&quot;PostEditLink&quot;);

var commentdiv = document.getElementById(&quot;PostCommentLink&quot;);



datediv.innerHTML = dateString(postDate[index], 1);

titlediv.innerHTML = &#39;&lt;a href=&quot;&#39; + postPermalink[index] + &#39;&quot;&gt;&#39; + postTitle[index] + &#39;&lt;/a&gt;&#39;;

contentdiv.innerHTML = &#39;&lt;p&gt;&#39; + postContent[index] + &#39;&lt;/p&gt;&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;&#39;;

if (editdiv)

editdiv.innerHTML = &#39;&lt;a href=&quot;http://www2.blogger.com/post-edit.g?blogID=&#39; + blogid + &#39;&amp;postID=&#39; + postId[index] + &#39;&quot;&gt;&lt;span class=&quot;quick-edit-icon&quot;&gt;&amp;#160;&lt;/span&gt;&lt;/a&gt;&#39;;

commentdiv.innerHTML = &#39;&lt;a target=&quot;_blank&quot; href=&quot;http://www2.blogger.com/comment.g?blogID=&#39; + blogid +&#39;&amp;postID=&#39; + postId[index] + &#39;&quot;&gt;Click para comentar&lt;/a&gt;&#39;;



var backlinksdiv = document.getElementById(&quot;backlinks-container&quot;);

backlinksdiv.innerHTML = &#39;&#39;;



//var postdiv = document.getElementById(&quot;post&quot;);

//postdiv.scrollIntoView(true);

checkFullNeo();

fetchComments(postId[index]);

}



function updateComments(json) {

if (json.feed.entry) {

for (var i = 0; i &lt; json.feed.entry.length; i++) {

var entry = json.feed.entry[i];

commentAuthor[i] = entry.author[0].name.$t;

commentContent[i] = entry.content.$t;

commentDate[i] = entry.published.$t.substring(0,10);

}

totalComments = json.feed.entry.length;

} else totalComments = 0;



updateCommentsPage(0);

}



function showNextPage(page) {

updateCommentsPage(page);

var commentdiv = document.getElementById(&#39;comments&#39;);

commentdiv.scrollIntoView(true);

}



function updateCommentsPage(page) {

var commentdiv = document.getElementById(&#39;comments&#39;);



if (totalComments == 0) {

commentdiv.innerHTML = &quot;&lt;center&gt;&lt;h2&gt;Sin comentarios aún&lt;/h2&gt;&lt;/center&gt;&quot;;

return;

}

disp = &quot;&lt;center&gt;&lt;h2&gt;&quot; + totalComments + &quot; &quot;;



var numpages = (totalComments / 10);

if (numpages &gt; 1) {

disp = disp + &quot;,&amp;nbsp;Pages:&amp;nbsp;&quot;

for (i = 0; i &lt; numpages; i++) {

if (i == page)

disp = disp + (i+1) + &quot;&amp;nbsp;&amp;nbsp;&quot;;

else

disp = disp + &#39;&lt;a href=&quot;javascript:updateCommentsPage(&#39; + i + &#39;);&quot;&gt;&#39; + (i+1) + &#39;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&#39;;

}

}



disp = disp + &quot;&lt;/h2&gt;&lt;/center&gt;&lt;dl class=&#39;comments-block&#39; id=&#39;comments-block&#39;&gt;&quot;;



if (oldestFirstOrder == 1) {

max = totalComments - 1 - (page * 10);

min = totalComments - 1 - ((page+1) * 10);

if (min &lt; 0)

min = 0;

for (var i = max; i &gt;= min; i--)



{

disp = disp + &quot;&lt;dt class=&#39;comment-author&#39;&gt;&quot; + &quot;En &quot; + dateString(commentDate[i], 0) + &quot;, &quot; + commentAuthor[i] + &quot; dijo...&lt;/dt&gt;&quot;;

if (commentAuthor[i] == blogAuthor) {

disp = disp + &quot;&lt;dd class=&#39;comment-body-author&#39;&gt;&quot; + commentContent[i] + &quot;&lt;/dd&gt;&lt;br/&gt;&quot;;

} else {

disp = disp + &quot;&lt;dd class=&#39;comment-body&#39;&gt;&quot; + commentContent[i] + &quot;&lt;/dd&gt;&lt;br/&gt;&quot;;

}

}

} else {

max = (page + 1) * 10;

if (max &gt; totalComments)

max = totalComments;

for (var i = page * 10; i &lt; max; i++) {

disp = disp + &quot;&lt;dt class=&#39;comment-author&#39;&gt;&quot; + &quot;En &quot; + dateString(commentDate[i], 0) + &quot;, &quot; + commentAuthor[i] + &quot; dijo...&lt;/dt&gt;&quot;;

if (commentAuthor[i] == blogAuthor) {

disp = disp + &quot;&lt;dd class=&#39;comment-body-author&#39;&gt;&quot; + commentContent[i] + &quot;&lt;/dd&gt;&lt;br/&gt;&quot;;

} else {

disp = disp + &quot;&lt;dd class=&#39;comment-body&#39;&gt;&quot; + commentContent[i] + &quot;&lt;/dd&gt;&lt;br/&gt;&quot;;

}

}

}

disp = disp + &quot;&lt;/dl&gt;&quot;;



if (page &lt; (numpages-1)) {

disp = disp + &#39;&lt;center&gt;&lt;h3&gt;&lt;a href=&quot;javascript:showNextPage(&#39; + (page+1) + &#39;);&quot;&gt;Next comments page&gt;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;/center&gt;&lt;br/&gt;&#39;;

}



commentdiv.innerHTML = disp;

}

function fetchOlderPosts(label) {

startIndex = startIndex + numPosts;

fetchPosts(label);

document.getElementById(&#39;LabelDisplay&#39;).scrollIntoView(true);

}



function fetchNewerPosts(label) {

startIndex = startIndex - numPosts;

fetchPosts(label);

document.getElementById(&#39;LabelDisplay&#39;).scrollIntoView(true);

}



function fetchLatestPosts(url, label) {

blogurl = url;

startIndex = 1;

fetchPosts(label);

}



function fetchPosts(label) {

var labelposts = document.getElementById(&quot;LabelPosts&quot;);

var labeltitle = document.getElementById(&quot;LabelTitle&quot;);

labeltitle.innerHTML = &quot;&lt;h2&gt;&lt;img alt=&#39;Indicator&#39; src=&#39;http://bloggerhacked.googlepages.com/indicator.gif&#39;/&gt;&amp;nbsp;&amp;nbsp;Actualizando...&lt;/h2&gt;&lt;hr/&gt;&quot;;



if (label == &#39;&#39;) {

feedurl = blogurl + &#39;feeds/posts/default?orderby=published&amp;start-index=&#39; + startIndex + &#39;&amp;max-results=&#39; + numPosts + &#39;&amp;alt=json-in-script&amp;callback=updateLabelPosts&#39;;

} else {

label = label.replace(&quot; &quot;, &quot;%20&quot;);

feedurl = blogurl + &#39;feeds/posts/default/-/&#39; + label + &#39;?orderby=published&amp;start-index=&#39; + startIndex + &#39;&amp;max-results=&#39; + numPosts + &#39;&amp;alt=json-in-script&amp;callback=updateLabelPosts&#39;;

}



var script = document.createElement(&#39;script&#39;);

script.setAttribute(&#39;src&#39;, feedurl);

script.setAttribute(&#39;id&#39;, &#39;jsonScript&#39;);

script.setAttribute(&#39;type&#39;, &#39;text/javascript&#39;);

document.documentElement.firstChild.appendChild(script);

}



function fetchComments(postid) {

var script = document.createElement(&#39;script&#39;);

script.setAttribute(&#39;src&#39;, blogurl + &#39;feeds/&#39; + postid + &#39;/comments/default?max-results=100&amp;alt=json-in-script&amp;callback=updateComments&#39;);

script.setAttribute(&#39;id&#39;, &#39;jsonScript&#39;);

script.setAttribute(&#39;type&#39;, &#39;text/javascript&#39;);

document.documentElement.firstChild.appendChild(script);

}





function showFullNeo() {

var showspan = document.getElementById(&#39;showlink&#39;);

var hidespan = document.getElementById(&#39;hidelink&#39;);

var fullspan = document.getElementById(&#39;fullpost&#39;);

showspan.style.display = &#39;none&#39;;

hidespan.style.display = &#39;inline&#39;;

fullspan.style.display = &#39;inline&#39;;

}

function hideFullNeo() {

var showspan = document.getElementById(&#39;showlink&#39;);

var hidespan = document.getElementById(&#39;hidelink&#39;);

var fullspan = document.getElementById(&#39;fullpost&#39;);

showspan.style.display = &#39;inline&#39;;

hidespan.style.display = &#39;none&#39;;

fullspan.style.display = &#39;none&#39;;

var post = document.getElementById(&#39;post&#39;);

post.scrollIntoView(true);

}

function checkFullNeo() {

var showspan = document.getElementById(&#39;showlink&#39;);

var hidespan = document.getElementById(&#39;hidelink&#39;);

var fullpost = document.getElementById(&#39;fullpost&#39;);

if (fullpost) {

showspan.style.display = &#39;inline&#39;;

hidespan.style.display = &#39;none&#39;;

} else {

showspan.style.display = &#39;none&#39;;

hidespan.style.display = &#39;none&#39;;

}

}

</script>

<!-- configurable parameter to control the number of posts in the second column of Neo -->

<!-- configurable parameter to control the number of posts in the second column of Neo -->

<script language='javascript'>

var numPosts = 10;

</script>

<script type='text/javascript'>

/*

cbb function by Roger Johansson, http://www.456bereastreet.com/

*/

var cbb = {

init : function() {

// Check that the browser supports the DOM methods used

if (!document.getElementById || !document.createElement || !document.appendChild) return false;

var oElement, oOuter, oI1, oI2, tempId;

// Find all elements with a class name of cbb

var arrElements = document.getElementsByTagName(&#39;*&#39;);

var oRegExp = new RegExp(&quot;(^|\\s)cbb(\\s|$)&quot;);

for (var i=0; i&lt;arrElements.length; i++) {

// Save the original outer element for later

oElement = arrElements[i];

if (oRegExp.test(oElement.className)) {

// Create a new element and give it the original element&#39;s class name(s) while replacing &#39;cbb&#39; with &#39;cb&#39;

oOuter = document.createElement(&#39;div&#39;);

oOuter.className = oElement.className.replace(oRegExp, &#39;$1cb$2&#39;);

// Give the new div the original element&#39;s id if it has one

if (oElement.getAttribute(&quot;id&quot;)) {

tempId = oElement.id;

oElement.removeAttribute(&#39;id&#39;);

oOuter.setAttribute(&#39;id&#39;, &#39;&#39;);

oOuter.id = tempId;

}

// Change the original element&#39;s class name and replace it with the new div

oElement.className = &#39;i3&#39;;

oElement.parentNode.replaceChild(oOuter, oElement);

// Create two new div elements and insert them into the outermost div

oI1 = document.createElement(&#39;div&#39;);

oI1.className = &#39;i1&#39;;

oOuter.appendChild(oI1);

oI2 = document.createElement(&#39;div&#39;);

oI2.className = &#39;i2&#39;;

oI1.appendChild(oI2);

// Insert the original element

oI2.appendChild(oElement);

// Insert the top and bottom divs

cbb.insertTop(oOuter);

cbb.insertBottom(oOuter);

}

}

},

insertTop : function(obj) {

var oOuter, oInner;

// Create the two div elements needed for the top of the box

oOuter=document.createElement(&quot;div&quot;);

oOuter.className=&quot;bt&quot;; // The outer div needs a class name

oInner=document.createElement(&quot;div&quot;);

oOuter.appendChild(oInner);

obj.insertBefore(oOuter,obj.firstChild);

},

insertBottom : function(obj) {

var oOuter, oInner;

// Create the two div elements needed for the bottom of the box

oOuter=document.createElement(&quot;div&quot;);

oOuter.className=&quot;bb&quot;; // The outer div needs a class name

oInner=document.createElement(&quot;div&quot;);

oOuter.appendChild(oInner);

obj.appendChild(oOuter);

},

// addEvent function from http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html

addEvent : function(obj, type, fn) {

if (obj.addEventListener)

obj.addEventListener(type, fn, false);

else if (obj.attachEvent) {

obj[&quot;e&quot;+type+fn] = fn;

obj[type+fn] = function() { obj[&quot;e&quot;+type+fn]( window.event ); }

obj.attachEvent(&quot;on&quot;+type, obj[type+fn]);

}

}

};



cbb.addEvent(window, &#39;load&#39;, cbb.init);

</script>


----------------------------


Llevaba una temporada echando un vistazo a todo lo que encontraba sobre esta plantilla de hackosphere y me llamaba poderosamente la atención que no hay prácticamente nada en español: la única "demo" que existe en este idioma... no funciona, al parecer. Al menos yo he recurrido a un blog portugués y a otro chino para poder enterarme de algo. (y no es broma).


Bien: el caso es que he intentado insertarla en un blog antigüo de pruebas que carecía de estilo: un blog en el que inserté mi prueba de ocultar la sidebar , y parece que no ha quedado mal del todo, aunque la he cargado más de la cuenta para insertar cosas como breadcrumbs o últimos comentarios. Me gusta particularmente la sincronicidad de las etiquetas con las entradas recientes: cuando picas en una etiqueta, se recarga y actualiza automáticamente el bloque de entradas recientes (que en la página principal muestra las diez últimas entradas) para mostrar aquéllas que contengan la etiqueta elegida.

Hay cosas que he insertado por mi cuenta, como unas etiquetas de las de siempre, colocadas junto a la entrada... porque no me acostumbro a no verlas "cerca"...

Y hay otras cosas a las que no me acostumbro y/o me gustan menos de la Neo, sobre todo en cuestión de "encorsetamiento" a la hora de "rediseñarla", pero... la plantilla está francamente bien. En mi caso, he optado por no probar el CSS original (fondo negro y sidebares con fondo azul), sino la Rounder, que he, como digo, adaptado a mi manera en este blog, empezando por colocar el cuerpo de entradas a la izquierda y a la derecha ambas sidebares: aquí se puede, sin problemas, colocar las entradas en el centro y las sidebares a los lados o alinear éstas a la izquierda, como en la demo de Rounder... cada quien, a su gusto.

Otra cosa, es que he adaptado el lenguaje de la plantilla y de los scripts al español (eso sí: me he "cargado" el "comments", porque no hay forma de que se adapte al número de comentario, singular o plural y, de hecho, casi todo lo que he visto por ahí ha optado por eliminarlo también y dejar sólo el número de comentarios totales).

Y basta de charla... quien quiera verla y probarla, ahí la tiene; y si a alguien le gusta y quiere los scripts y la plantilla en español, intentaré sacar tiempo para ello...
Leer mas >>


De tratos con un diablejo

2

(Como éste y Nada son los blogs en los que más trabajo y no me apetece perder los cuentos que tengo por ahí, pues... aquí va la "serie", por si este blog resiste al tiempo y Blogger, de manera que que mis muy hipotéticos nietos puedan leerlos-largo me lo fío, caray...-):


Los problemas vienen en “manada” (lo mismo que las alegrías: sólo que los períodos de éstas me resultan más bien de sequía). ¿O debiera decir “en estampida?...

Quizás se deba a la obsesión, al empecinamiento-y la duda- en "tener" que resolver uno a uno o en conjunto los aspectos del caos en que veo mi vida; y a la terrorífica sospecha de ser gobernado por un dios dormido y ausente, cuando no absolutamente indiferente.

El caso es que levanto los ojos del fuego que arde en el hogar y allí está: un ser diminuto, estrambótico: se acerca a mí con pasos de piernas cortas y, aparentemente, desde la Nada.

Mi sobresalto es mayúsculo:



¿quién o "qué" eres tú?- consigo articular-

.- Soy la Salvación- me responde el engendro, trepando a mis rodillas-

.- ¿De qué hablas?- me asombro- ¿Quién te ha llamado? Y, por cierto: si la salvación que ofreces es tan pequeñita como tu apariencia, aviado está tu "salvado".

.- Como tú mismo apuntas, lo que ves es sólo apariencia: de forma que ahórranos la ironía- contesta molesto el ser- soy un diablo y vengo a ofrecerte un trato.

.- Bien… si Dios existe, no veo porqué no han de existir los demonios. Más bien los diablejos: poco poderoso pareces, amigo…

.- ¡Y dale¡!-exclama, más que molesto, el demoniejo- voy a hacer que no he oido tu última frase.
A lo que iba: tus "jaculatorias" cotidianas se oyen en todos los rincones del Averno, hasta el punto de que hemos pensado en tapiar las cavernas para que no nos hagan eco tus quejas. Se nos ha ocurrido, no obstante, que sería mas fácil llegar hasta tí y ofrecerte la solución a tu vida.
Pídeme lo que quieras y lo obtendrás: belleza, fama, amor, poder, dinero… lo que quieras.

.- Bien: ¿puedo pedirte todo eso o he de conformarme con sólo uno de esos "dones"?. Lo pregunto por qué no sé aún si funcionas como la lámpara de Aladino…

.- ¡No soy un "chisme" de leyenda!. ¡Soy muy real!... y te advierto que comienzas a enfadarme y eso no te beneficia- avisa el diablejo, cada vez más encendido-

.- De acuerdo: pongamos que digo que sí: adelante, solucióname la existencia. ¿Puedo preguntar a cambio de qué?. Seguro que una vez obrado el prodigio de cambiar mi vida, me vienes con un contrato donde me arrebatas mi alma, mi cuerpo o los dos a la vez. ¿De qué se trata?

.- Vamos a ver: ya estoy harto de que antes, durante y después de “Fausto” nos vengan con las mismas. ¿Acaso no pagas al médico antes de salir de su consulta?. ¿Y al frutero, al pescadero, al carnicero o a quien te presta un servicio cualquiera? ¿Acaso no has tenido que pagar incluso hasta los "favores"?. Venga ya…

.- Tienes razón, pero… los dioses otorgan dones y no los cobran-arguyo-

.- Dime qué dones has recibido de los dioses en los últimos tiempos. Deja, deja: ya te respondo yo: Quizás el mantenerte con vida y listos. ¿Y no estás pagando el don de la vida con tu sangre y tus problemas? ¿No estás pagando ese "regalo" con un infierno muy real cada uno de tus días?.

.- Vuelves a tener razón… menudo favor… visto así, casi mejor flotar desde ya en el Limbo…
Bien, pero dime a qué me vas a pedir a cambio.

.- Ya lo supondrás-afirma el demonio- tu alma.

.- ¿Y para qué quieres mi alma…?,¿ de qué te sirve a tí?

.- Eso a tí no te importa. Digamos que los demonios somos coleccionistas de almas. Una menos para el Paraíso es una gran victoria en el inframundo.

.- Pero si me dejas sin alma me dejas sin consciencia. Y si no tengo consciencia de mí mismo, ¿cómo voy a disfrutar de los dones que me otorgas?

.- Disfrutarás de tu consciencia… un tiempo. No te preocupes.

.- Ya: pues me preocupo. Si vas a meterte dentro de mí ya no seré yo: me da igual que sea ahora o dentro de tres meses. No hay trato. A menos que me concedas la inmortalidad de cuerpo y alma.

.- Mira por dónde la inmortalidad de tu alma no puedo ofrecértela, porque ya la tienes "de serie". Eso sí: será mía.
Respecto del cuerpo… para qué cuernos iba yo entonces a hacer un trato contigo si no puedo tocarte ni obtener nada a cambio en todos los siglos que le quedan de vida al mundo?

. Tú verás: igual desde esa posición puedo ofrecerte otras almas-aventuro-

.- ¡JAJAJAJAJJJjjJAJAAJAJjjj!, pues vaya cosa que me ofreces, ajajjajajajajajajjj- se desternilla el demoniejo.¡ Pero si ya a los demonios no nos queda otra cosa que la tentación directa!.
Vamos hombre: mira a tu alrededor: que el Diablo ya no tiene que hacer el más mínimo esfuerzo por fastidiar el mundo… si vuestro "libre albedrío" ha imaginado y llevado a cabo mil y una monstruosidades capaces de eclipsar hasta la imaginación del Príncipe de los Infiernos.
Anda: no me ofrezcas almas que se nos dan "volutariamente" y a cambio de nada. Eso no tiene mérito: sí lo tiene el de quien se resiste al mal que ve actuar en su derredor.
Por eso estoy aquí: "trabajando".

.- De acuerdo: no está el mundo para captar almas que no valen un céntimo siquiera para un diablo. Pues te advierto entonces que hemos llegado a un punto muerto en nuestra "negociación". ¿Se te ocurre alguna clausulilla en tu contrato que me garantize consciencia y alma?

.- Pues, amigo trilero, las cosas son como te las expongo. O lo tomas o lo dejas. Se trata simplemente de seguir con tu miserable y "consciente" vida o cambiar todo eso… sin alma.

.- Teniendo en cuenta que me has apartado de mis preocupaciones durante la última media hora, ya me has hecho bastante favor. Así que gracias y hasta nunca. Ha sido un placer- y despido así al demonio-

.- Un momento: si es cierto que te he distraído, me debes algo a cambio.

.- ¡Y un jamón!-protesto- A ver dónde dice que prestáis esa clase de favores los demonios ni que te deba nada a cambio. Sobre todo porque no llevabas intención de distraerme y no sabrías que me has hecho un favor si no te lo llego a decir yo.
Si no hay intención no hay nada que dar. En todo caso has hecho una "obra de caridad" sin saberlo ni proponértelo.
¿Y no ha de ser siempre malvado un demonio hasta en sus intenciones?

.- ¿Sabes qué te digo?. Que eres más pesado que un bocadillo de churros y que me largo por no clavarte el tridente en donde se me ocurra. Pero volveré y te cobraré, ¡de eso puedes estar seguro!: cuando consulte el archivo contractual del Averno.

.- Hala: pues adiós y suerte. Y en serio que te deseo que tus compañeros del pozo de Pedro Botero no se rían de tí.

Y envuelto en centellas y bolas de fuego, desaparece el demoniejo.

Creo que yo también voy a consultar esos contratos infernales. Por si acaso. Está visto que no hay nadie en mundos, submundos, inframundos o supramundos que regale absolutamente nada. Ni por
"despiste". Pues sí…

Fin

Junio
Leer mas >>


Post navigation