lunes, 22 de noviembre de 2010

Power Metal


Stratovarius - Speed Of Light





domingo, 21 de noviembre de 2010

Here Comes Another Bubble


CSS para un amigo

Estoy anotando por aquí todo lo que se me ocurre. Acabo de recordar que no tome nota del sistema de numeración que preparé para un amigo hace ya un tiempo. Anotémoslo aquí que ya no recuerdo que es lo que hice :D
ol.commentlist {
counter-reset:com;
}

ol.commentlist > li > div > div > cite:before {
content:"[" counter(com) "] ";
counter-increment:com;
color:#008;
}

ul.children {
counter-reset:subcom;
}

ul.children cite:before {
counter-increment:subcom;
content:"["counter(com) "." counters(subcom,".") "] ";
color:#008;
}

Ya puestos he colocado una inútil numeración en los títulos de las entradas de este blog.

El criterio de divisibilidad entre 7

Es curioso que este criterio no aparezca en los libros siendo más fácil que el criterio de divisibilidad entre 11.
Un número es divisible entre 7 si y solo si la diferencia entre la parte entera del resultado de dividirlo entre 10 y el doble de su cifra de unidades lo es.
Demostrémoslo

Sean n, p y q naturales tales que n=10·p+q y que q esté entre 0 y 9. Entonces
n = 0 (mod 7) equivale a 
10·p+q = 0 (mod 7) equivale a 
2·(10·p+q) = 2·0 (mod 7) es decir
20·p+2q = 0 (mod 7) que equivale a 
20·p+2q-3·7·p= 0-3·7·p (mod 7) es decir
-p+2q= 0 (mod 7) que equivale a
p-2q = 0 (mod 7)

No todo es tan bonito como me parecía

Desgraciadamente las comillas en la plantilla son filtradas, es decir, tenemos limitaciones para trabajar en la plantilla. Pero al menos dichas limitaciones no existen en las entradas. Mientras esta entrada sea visible el lector verá un botón debajo del título del blog mediante el cual podrá eliminar a su gusto aquellos elementos que no le agraden, utilizando las teclas del cursor, el espacio y la b

¿Vemos la fuente encargada de colocar el botón?
var erkie = document.createElement('SPAN');
  erkie.style.padding="10px";
  erkie.style.background="#aab";
  erkie.style.cursor = 'move';

  erkie.appendChild(
    document.createTextNode('Manuel Antonio, si no te gusta lo que lees pulsa aquí')
  );
  erkie.onclick = function(){
    var s = document.createElement('SCRIPT');
    s.type='text/javascript'
    document.body.appendChild(s);
    s.src='http://erkie.github.com/asteroids.min.js';
  }
  document.body.getElementsByTagName('H1')[0].parentNode.appendChild(erkie);

La fuente del genial "invento" está http://erkie.github.com/asteroids.js

En esta historia Frodo es ECMAScript

Para expresar mi opinión sobre la introducción de los getters/setters en ECMAScript se me ocurrió este "cuento" que dejé en el blog de Angus. De paso probamos a ver si Blogger le pone pegas a meter un style en los tags, concretamente con uno de mis degradados de color.
Object.prototype.takeGiftFromSauron = function() {
  function makeRingWraith() {
    var me = this;
    Object.getOwnPropertyNames(me).forEach(function(name){
      if (name === 'Object') return;
      var bag = Object.getOwnPropertyDescriptor(me,name);
      if (bag.configurable) delete me[name];
      else if (bag.writable) me[name] = null;
      else alert('damn '+name+'!');
    });
  }
  Object.defineProperty(this,'ring',{get:makeRingWraith});
  return this;
}

var Frodo = Object.defineProperties({},{
  'coins':{value:3,enumerable:true},
  'soul': {value:'simple',enumerable:true,configurable:true},
  'sword':{value:'elfic',enumerable:true,configurable:true},
  'cape': {value:'brown',enumerable:true,writable:true}
});

// Frodo do you like this innocent ring?
Frodo.takeGiftFromSauron();
// Wear the ring Frodo!!
alert(Frodo.ring);
// Surprise! Little avaricious hobbit, where are your soul and your elfic sword?

It works! Blogger parece aceptar cualquier cosa. Empieza gustarme :D

¡Blogger no filtra los scripts!

No sólo funciona a nivel de la plantilla ... ¡puedes meter lo que quieras en las entradas!

Lenguajes inmaduros: Ruby

setter1 = proc { | x | y = x }      # y is local here
y = 13
setter2 = proc { | x | y = x }      # y is nonlocal here
setter1.call(99)
puts y                              # prints 13
setter2.call(77)
puts y                              # prints 77

Veamos lo que obtendríamos con la versión equivalente en Scheme

(define setter1 (lambda (x)(set! y x)))
(define y 13)
(define setter2 (lambda (x)(set! y x)))
(setter1 99)
(display y)  ;; prints 99
(setter1 77)
(display y)  ;; prints 77

El comportamiento de Ruby es bastante desagradable. Los proc parecen capturar una instantánea del environment que ven en el momento de su creación. Es necesario comprobar si se comparten datos o no. La cuestión ¿tengo ganas de andar con este pobre lenguaje de nuevo?

Lo bueno de Blogger

Blogger es una plataforma de blogging que no me entusiasma, pero tiene algo que la hace destacar: puedes meter todo lo que quieras en la plantilla. Así que vamos a probar como va mi highligthter:
var sheet   = null;
var all     = true;
var selector    = '.irrelevant';
var declaration = 'display:none';//'visibility:hidden';      
var index;

window.onload = function() {
  var filterButton = document.getElementById('filter');
  filterButton.onclick = action;
  sheet = document.styleSheets[0];
}

function insertRule() {
  if (typeof sheet.insertRule !== 'function') {
    index = sheet.addRule(selector,declaration,sheet.rules.length);   
  }
  else {
    index = sheet.insertRule(selector+' {'+declaration+'}',sheet.cssRules.length);     
  }
}

function deleteRule(){
  if (typeof sheet.deleteRule !== 'function') {
    index = sheet.removeRule(index);   
  }
  else {
    index = sheet.deleteRule(index);     
  }
}

function action(ev) {
  if (all) {
    insertRule();all=false;
  }
  else {
    deleteRule();all=true;  
  }
}

It works!
Debo mencionar que mi resaltador de codigo lo deje sin terminar hace dos años y que en aquellos momentos no funcionaba en Internet Explorer.

sábado, 20 de noviembre de 2010

The boring buzzword

Han pasado ya cinco años desde que Tim O'Reilly publicara su célebre artículo What Is Web 2.0. Me resulta sorprendente que todavía sigamos utilizando ese pesado y obsoleto término como si aportara algo nuevo.