Sobre el bloqueador de popups de Firefox

(4 comentarios)

La gente de Free Pop Up Blocker (descubierta en Adot’s notblog*)tiene una comparativa de los mejores bloqueadores de pop ups gratuitos, ya sean integrados en los navegadores o como herramienta de terceros.

Y como era de esperar, al menos por mi, la mejor puntación entre todos los bloqueadores de popups del mercado, se la lleva Firefox, que tuvo un 100% en todos los tests.


Clasificación de bloqueadores

Añademe a…

(4 comentarios)

Destrozando clásicos del cine lección I: El Retorno del Jedi

(3 comentarios)

Supongo (o mas bien espero, porque viniendo de George Lucas se puede esperar cualquier cosa) que esto debe ser un fake. Pero en teoría se anuncia como imagenes filtradas de los nuevos DVDs revisados de la Guerra de las Galaxias.

El video en concreto pertenece al final de ‘el Retorno del Jedi’, en las escenas en que aparece el fantasma de Anakin al lado del de Yoda y Obi-wan. Pues bien, si a George no le pareció suficiente ese insulto a la inteligencia que era ‘La Amenaza Fantasma’, con el maldito Jar Jar Binks, y después las guerras Clon, ahora se dedica a destrozar también las tres primeras películas de la saga, cambiando en las imagenes mencionadas al actor original, Sebastian Shaw, por el niñato que eligió para interpretar a Anakyn, Hayden Christensen.

Y no es que me importe demasiado, porque no soy fan de la Guerra de las Galaxias, simplemente me gustó la trilogía original, pero un chaval rubito con cara de niña pega mas como modelo de un anuncio de Pantem que como uno de los mejores villanos de la historia del cine.

La cosa va de escritorios

(8 comentarios)

Si Chavalina y David enseñan sus escritorios, yo como buen ser envidioso que soy, no podía ser menos, aunque para dar un poco mas de interes al asunto voy a comentar que programas he usado.


Mi escritorio

El estilo visual es Method, de Sonus. Para aplicarlo en lugar de tener que usar un programa que consume recursos y además no es gratuito, como StyleXP uso MultiPatcher para parchear la dll que se encarga de los estilos visuales en XP, uxtheme.dll.

Los iconos de tamaño mayor del normal para la barra de inicio se consiguen con True Launch Bar, un programa de pago, aunque tiene una versión de prueba que muestra un texto advirtiendote de que no estas registrado en la barra de inicio. Los iconos, tanto de la barra de inicio como en el escritorio son una mezcla de Gant y Umicons, y aunque no se vea, todos los iconos, los diálogos como el de copiar archivos e incluso la pantalla de cierre de Windows tienen aspecto Gant gracias a GUI Replacer.

Una lista de todos los releases de Gant, Umicons, miniGANT,… podeis encontrarla en la sección en DevianART de su creador, Mattahan, así como en su página web, junto a otras cosas como wallpapers.

Por último, el calendario es Rainlendar, con el skin Shadow y el programa que mide la temperatura Samurize (esto en concreto ya expliqué como hacerlo en El tiempo en tu escritorio con Samurize

El escritorio Linux ya lo enseñaré cuando termine de luchar con SuperKaramba.

Las peores canciones de la historia

(53 comentarios)

Cek y Topopardo publican listas de las canciones que mas les gustan en sus respectivos blogs (topopardo solo lleva dos, pero porque incluye los mp3s :P). Yo la publicaré de las que odio. Por que es mas facil, porque no te sientes mal por dejar algún clásico sin mencionar si la haces de las mejores, y sobre todo porque me gusta llevar la contraria.

Así que aquí está, the Zootropo’s top ten de las peores canciones de la historia.

  1. Los del Río – Macarena, ese virus auditivo que llegó a contagiar a medio planeta.
  2. Las Ketchup – Aserejé, demostrando que para triunfar en verano solo se necesita una melodía machacona, una letra con el menor sentido posible y un baile para la canción.
  3. Georgie Dann – La Barbacoa, otro representante de las canciones del verano, que arrasan en el top ten. Este es de la escuela ‘repite una frase un minimo de 200 veces en la canción’.
  4. Melody – El Baile del Gorila, otra que sabe que si la canción tiene baile el éxito está asegurado. Tiene menos crimen (o mas depende de como se mire) que el aserejé porque esta niña al menos se molesto en crear una letra, por muy estúpida que sea.
  5. Enrique Iglesias – Héroe, esa grabación que salió con el chico desafinando suena casi mejor que el original.
  6. Mª Jesús (con su inseparable acordeón) – El baile de los pajaritos, los animales hacen furor en nuestra lista.
  7. Paco Pil – Viva la fiesta, no se que habrá sido de este joven pastillero, himno de masas cuando aparecieron los primeros pseudo bakalas en el pais.
  8. King Africa – La Bomba, acabé tan harto de esta canción que todavía lloro por las noches al recordarla.
  9. ‘Britney Spears – Ups, I did Again’, lo malo es que lo hizo una vez, y otra, y otra, y desde que llegó no ha parado (de hacer canciones pésimas, se entiende).
  10. Demmis Rousso – Triki triki, otro que no se le entendía la letra, pero al menos era griego o algo así (creo).

Faltan bastantes canciones, pero como ya he dicho, es una de las ventajas de hacer listas de las peores, que no te dan remordimientos de dejar alguna sin poner.

Code Colorizer

(0 comentarios)

CodeColorizer convierte el código fuente de lenguajes como ASP, C/C++, Clipper, Delphi/Pascal, HTML, Java, JavaScript y Visual Basic a documentos HTML con coloreado de sintaxis. Estuve buscando ayer algún programa o herramienta web que sirviera para eso, mas que nada porque ya había visto alguno y sabía que existía y no tenía que crear el mío propio 😛 y estoy contento con los resultados 🙂

Un ejemplo usando código Javascript del tutorial que estoy escribiendo:

function departamento(){
this.personal = new Array();
this.anyadir = anyadir;
this.calcularNomina = calcularNominaDept;
}

function empleado(nomina){
this.nomina = nomina;
this.calcularNomina = calcularNominaEmpl;
}

function anyadir(objeto){
this.personal.push(objeto);
}

function calcularNominaDept(){
var nomina = 0;
for(var i = 0; i < this.personal.length; i++){
nomina += this.personal[i].calcularNomina();
}
return nomina;
}

function calcularNominaEmpl(){
return this.nomina;
}

empresa = new departamento();
empresa.anyadir(new empleado(200));
empresa.anyadir(new empleado(100));
contabilidad = new departamento();
contabilidad.anyadir(new empleado(120));
empresa.anyadir(contabilidad);
document.write(empresa.calcularNomina());

function departamento(){
this.personal = new Array();
this.anyadir = anyadir;
this.calcularNomina = calcularNominaDept;
}

function empleado(nomina){
this.nomina = nomina;
this.calcularNomina = calcularNominaEmpl;
}

function anyadir(objeto){
this.personal.push(objeto);
}

function calcularNominaDept(){
var nomina = 0;
for(var i = 0; i < this.personal.length; i++){
nomina += this.personal[i].calcularNomina();
}
return nomina;
}

function calcularNominaEmpl(){
return this.nomina;
}
empresa = new departamento();
empresa.anyadir(new empleado(200));
empresa.anyadir(new empleado(100));
contabilidad = new departamento();
contabilidad.anyadir(new empleado(120));
empresa.anyadir(contabilidad);
document.write(empresa.calcularNomina());

Está claro que el código es mas legible (y mas bonito :P) después de pasarlo por el colorizer.

Nedstat

(0 comentarios)

Ayer añadí un nuevo contador aparte del de Site Meter que tenía antes, el de Nedstat que es mas conocido y utiliza mas gente, mas que nada para comparar el número de visitas que me daban Site Meter y este. Y la verdad es que menudo cambio… no se como medirán cada uno, puede que Nedstat tenga un límite de tiempo entre páginas vistas menor que Site Meter para que sea considerado otra visita, pero el número de visitas es bastante mayor según Nedstat que según Site Meter. En concreto 242 según el primero, y 162 según el segundo, ¡lo cual supone una diferencia de 80 visitas!, que es bastante para un sitio que está sobre las 200.

Otra cosa interesante, y que aunque sea una tontería quieras que no hace algo de ilusión, es que me coloqué en el puesto 37 de los blogs mas visitados (de entre los que tienen contador Nedstat) según el Top 1000 de Nedstat 🙂

Etiquetando los correos no leidos en Gmail

(2 comentarios)

Parece mentira que cosas tan tontas sean tan útiles 🙂 Leo en TimeLine un truco sacado de gmailwiki que consiste simplemente en crear una etiqueta (label) Unread en Gmail. Sin necesidad de crear ningún filtro ni similares Gmail marcará todo el correo no leido con esta etiqueta.

Javascript: Expresiones Regulares

(88 comentarios)

Las expresiones regulares son una forma de describir cadenas de caracteres que sirven para comparaciones y reemplazos complejos. Por ejemplo si escribimos en la línea de comandos de windows dir *.exe, eso es una expresión regular que define todas las cadenas de caracteres que empiecen con cualquier cosa seguida de .exe, es decir, todos los archivos .exe. La acción de comparar la cadena de texto con el patrón que le hemos dado (la expresión regular) se denomina reconocimiento de patrones (pattern matching).

En Javascript las expresiones regulares se basan en las de Perl, de forma que son muy muy parecidas y se representan por el objeto RegExp (de REGular EXPresion). Para crear una expresión regular podemos usar el constructor del objeto RegExp, pero es mas conveniente utilizar una sintaxis especialmente pensado para ello. Veamos un ejemplo, el mas simple posible.

var patron = /pato/;

Este es el patrón mas sencillo. En una comparación con una cadena devolvería true en el caso de la cadena con la que se compara sea “pato”. Todos los patrones se escriben entre barras invertidas, así como las cadenas de texto se escriben entrecomilladas. La otra forma de crear el objeto RegExp es como deciamos utilizando su constructor.

var patron = new RegExp(“pato”);

Pero en este caso lo que le pasamos al constructor es una cadena, por lo tanto en lugar de usar / lo entrecomillamos. Para complicar un poco mas las cosas supongamos que queremos comprobar si la cadena que nos pasan es pato, pata o pate. Entonces usariamos los corchetes, que indican opción, es decir, al comparar con /[aeo]/ devolvería cierto en caso de que la cadena fuera la letra a, la e o la letra o.

var patron = /pat[aeo]/;

¿Y si quisieramos comprobar si la cadena es pat0, pat1, pat2, …, pat9? En lugar de tener que encerra los 10 dígitos dentro de los corchetes podemos utilizar el guión, que sirve para indicar rangos. Por ejemplo 0-9 serían todos los números de 0 a 9 inclusive.

var patron = /pat[0-9]/;

Si quisieramos por ejemplo que el último caracter fuera o un dígito (0-9) o una letra minúscula (a-z) simplemente se escribirían dentro de los corchetes un criterio detras de otro.

//pat seguido de un número o letra minúscula
var patron = /pat[0-9a-z]/;
//ahora también puede estar seguido de una A mayúscula
var patron2 = /pat[0-9a-zA]/;

¿Y que ocurriría si en lugar de tener solo un número o una letra minúscula quisieramos que pudieran haber varias, pero siempre minúsculas o números? Entonces recurrimos a +, *, ? y {}. + indica que lo que tiene a su izquierda puede estar 1 o mas veces, * indica que puede estar 0 o mas veces (en el caso de + el número o la minúscula tendría que aparecer al menos una vez, con * pat también se aceptaría), ? indica opcionalidad, es decir, lo que tenemos a la izquierda puede o no aparecer (puede aparecer 0 o 1 veces) y por último {} sirve para indicar exactamente el número de veces o que puede aparecer o un rango. Por ejemplo {3} indicaría que tiene que aparecer exactamente 3 veces, {3,8} indicaría que tiene que aparecer de 3 a 8 veces y {3,} tres veces o mas (las que sean). Hay que tener cuidado porque {} exige que se repite lo último, cuando no se esté seguro de lo que va a hacer usamos (). Para ilustrar esto vamos a ver un primer ejemplo real con expresiones regulares:

<script>
var patron = /pat[ao]{2}/;
document.write(“patopata”.search(patron));
document.write(“patoa”.search(patron));
patron = /(pat[ao]){2}/;
document.write(“patopata”.search(patron));
document.write(“patoa”.search(patron));
</script>

La función search del tipo de objeto de String (asociado a las cadenas de caracteres) comprueba si la cadena representada por el patrón que le pasamos como argumento se encuentra dentro de la cadena sobre la que se llama a search. En el caso de que así sea devuelve la posición (por ejemplo para la cadena pato con el patron /p/ devolvería 0, 1 si el patrón es a, 2 si es t,…) y -1 si no se encuentra. Otra función útil que merece la pena comentar es cadena.replace(patron, sustituto), que sustituye en la cadena sobre la que se llamó las ocurrencias del patrón por la cadena especificada

Si ejecutamos el programa anterior la salida por pantalla será -100-1, es decir, la primera y última llamada a search devuelven no encontrado y la segunda y las otras dos encuentran la cadena en la posición 0. Si nos fijamos vemos que esto es obvio. El patrón que definimos primero, /pat[ao]{2}/ incluye las cadenas “pataa”, “patao”, “patoo” y “patoa”, ya que lo que indica {2} que debe repetirse dos veces es [ao], no pat[ao]. Sin embargo cuando redefinimos el valor del patron utilizamos los paréntesis de forma que {2} se aplique sobre pat[ao].

Otro elemento interesante en las expresiones regulares es la especificación de las posiciones en que se tiene que encontrar la cadena, esa es la utilidad de ^ y $, que indican que el elemento sobre el que actúa debe ir al principio de la cadena o al final de esta.

//buscamos “oo” y que se encuentre al principio de la cadena en la que esté
var patron = /^aa/;
//buscamos uu al final de la cadena
patron = /uu$/;

Otros elementos a tener en cuenta son:

  • \d un dígito. Equivale a [0-9]
  • \D cualquier caracter que no sea un dígito.
  • \w Cualquier caracter alfanumérico. Equivalente a [a-zA-Z0-9_].
  • \W cualquier caracter no alfanumérico
  • \s espacio
  • \t tabulador

Eliminar items del menú contextual de Firefox

(1 comentario)

Interesante este truco que he visto en el foro de Mozillazine. Como la apariencia de Firefox se define con archivos css, basta editarlos para modificar la apariencia de Firefox. En este caso para eliminar entradas del menú contextual. Tenemos que editar userChrome.css y establecer display a none para los items que no queremos que se muestren. Por ejemplo:

#context-setWallpaper, #context-blockimage{
display: none;
}

Una lista de las entradas posibles:

  • #context-back: “Back” (atras)
  • #context-blockimage: “Block images…” (bloquear imágenes)
  • #context-bookmarklink: “Bookmark this Link…” (añadir enlace a marcadores)
  • #context-bookmarkpage: “Bookmark this Page…” (añadir página a marcadore)
  • #context-copy: “Copy” (copiar)
  • #context-copyemail: “Copy Email Address” (copiar dirección de correo)
  • #context-copyimg: “Copy Image Location” (copiar dirección de la imagen)
  • #context-copylink: “Copy Link Location” (copiar dirección del enlace)
  • #context-cut: “Cut” (cortar)
  • #context-delete: “Delete” (borrar)
  • #context-forward: “Forward” (adelante)
  • #context-metadata: “Properties” (propiedades)
  • #context-openlink: “Open Link in New Window” (abrir enlace en nueva ventana)
  • #context-openlinkintab: “Open Link in New Tab” (abrir enlace en nueva pestaña)
  • #context-paste: “Paste” (pegar)
  • #context-reload:
    “Reload” (recargar)
  • #context-saveimage: “Save Image As…” (guardar imagen como)
  • #context-savelink: “Save Link As…” (guardar enlace como)
  • #context-savepage: “Save Page As…” (guardar página como)
  • #context-searchselect: “Web Search for…” (buscar en la web)
  • #context-selectall: “Select All” (seleccionar todo)
  • #context-stop: “Stop” (parar)
  • #context-setWallpaper: “Set As Wallpaper” (establecer como imagen de fondo)
  • #context-undo: “Undo” (deshacer)
  • #context-viewbgimage: “View Background Image” (ver imagen de fondo)
  • #context-viewimage: “View Image” (ver imagen)
  • #context-viewinfo: “View Page Info” (ver información de la página)
  • #context-viewpartialsource-mathml
  • #context-viewpartialsource-selection:
    “View Selection Source” (ver código fuente de la selección)
  • #context-viewsource: “View Source” (ver código fuente)
Página 1 de 812345...Último »