¿Por qué un número elevado a 0 es igual a 1?

Esto se sale totalmente de la línea editorial del blog, desde luego, pero me apetecía contarlo por aquí. El caso es que en una charla de oficina comenté que una vez cuando cursaba 2º de ESO la profesora me hizo explicar en clase por qué cualquier número elevado a 0 es igual 1, y un compañero me discutió que no. Así que con 32 años me volvía a ver delante de una pizarra haciendo esta demostración:

Podemos expresar que X0 es el resultado de Xn-n siendo X cualquier número real menos el 0 y siendo n cualquier número real. O, por ponerlo con número, podemos decir 20 es el resultado de (por ejemplo) 22-2.

Entonces por propiedades de las potencias Xn-n es igual a Xn/Xn. Siguiendo el ejemplo anterior 22-2=22/22.

Por lo tanto tenemos que X0 = Xn/Xn, y siendo el numerador y el denominador iguales en la división el resultado es necesariamente 1. Es decir 20 = 22/22, por tanto 20 = 4/4. Y 4/4=1, así de simple.

¿Y en el caso del 00? Bueno, eso a mi ya me supera. Pero os dejo un enlace a otro blog donde lo explican y debaten, para que matéis vuestra curiosidad.

Reciclando un viejo móvil Android en una consola portátil.

Hace unos meses cambié mi viejo móvil Huawei por un BQ, y desde el cambio el Huawei estaba metido en un cajón criando polvo (literalmente, no veas lo que me llevó limpiar la pantalla). En estos tiempos pre-Navidad andan todos los buenos jugones clásicos locos con la SNES mini, como lo anduvieron hace un año con la NES, así que me han entrado la ganas de jugar un poco. Llevaba unos días mirando proyectos de portátiles construidas sobre una Raspberry Pi Zero, y la cosa pintaba bien como proyecto factible.

Sword of Xolan

Pero la Raspberry y las piezas tienen un precio, no muy caro pero este mes ya he tenido muchos gastos (empieza la NBA y hubo que pagar el League Pass, jubilar ropa vieja, mi padre cumple años este mes y el que viene los cumple mi abuela, Eric Gales toca la semana que viene por aquí, el veterinario para el gato… pequeñas cosas de la vida que van sumando) así que pensé que el móvil podría tener una segunda vida. Le pegué un limpiado de pantalla, lo dejé cargando un rato, lo encendí y le desinstalé todas las aplicaciones viejas que tenía y que no necesitaba para esto.

Ya sabéis que soy un fan de los juegos de antaño, ya hablamos de alternativas para jugar en tu navegador o de emuladores en otro tiempo, así que decidí aplicármelo al móvil.

Clásicos Sega

Lo primero que hice fue irme al Play Store a la sección de Sega y descargarme 8 clasicazos que tienen allí disponibles de gratis para el jugador pureta como yo: Sonic, Comix Zone, Space Harrier II, Golden Axe, Phantasy Star II, The Revenge of Shinobi, Altered Beast y Kid Chameleon.

Altered Beast

Pero aunque estos clásicos de la SEGA me encanten para ranciear en el fondo soy un nintendero, mi consola es la SNES. Así que el siguiente paso fue descargarme el Super Retro 16 del Play Store. Como la legalidad de la descarga de ROMS de consolas antiguas es un tema sometido a debate no voy a comentaros que os paséis por LoveRoms, por ejemplo, para buscar los juegos clásicos de dicha consola, ya que podríais incurrir en algún delito. En todo caso hay algunos juegos propios pensados para jugarse en el emulador, como el Thor’s Quest al que podéis acceder desde la tienda de la aplicación y que no es sino una copia del mítico Donkey Kong.

Thor's Quest

Para remata la cosa me agregué algún juego más por fuera del emulador, como La Abadía de los Muertos o el Sword of Xolan, para dar variedad.

¿Qué echo en falta? Pues básicamente que los controles en pantalla son un coñazo. Están bastante bien adaptados, ahí chapeau por los desarrolladores, pero la sensibilidad… en fin, yo no me adapto sin sentir el botón. Así que para el mes igual pruebo con uno de esos mandos con bluetooth y soporte, y termino la conversión del teléfono en consola. Lo bueno de todo esto: que realmente no necesitas ningún conocimiento técnico para hacerlo, y de esta forma alargas la vida de un dispositivo en desuso y te das el capricho de hacerte con una consola sin dejarte una pasta.

Dragon Ball

Stranger Things: The Game

Dentro de cosa de dos semanas se estrena la seguna temporada de Stranger Things, serie de la que ya expuse conspirativas teorías por aquí. Para ir abriendo boca y que el hype no decaiga Netflix ha decidido sacar un juego de estética retro basado en la serie.

Con gráficos estilo 16 bits y un planteamiento multipersonaje el juego, al igual que la serie, pretende transportar al seguidor treintañero a su infancia. Puede descargarse gratuitamente para Android o iOS.

Aquí os dejo un gameplay por si queréis profundizar más antes de probarlo:

Acceder a los atributos data de HTML5 desde jQuery

En el pasado alguna vez utilizamos los atributos rel o class para incluir valores extra que usar luego en javascript. No era una buena práctica, pero a veces era la solución más práctica. HTML5 acabó con esto introduciendo los atributos data, que nos permiten vincular información extra a un elemento del DOM. Veamos un ejemplo:

<div id='fruta' data-fruta='fresa'></div>

En el div con Id «fruta» vamos a guardar un dato: que es una fresa (ok, ya se que el ejemplo no parece tener mucho sentido práctico). ¿Cómo accedo a este valor desde jQuery? Pues con el método data() puedo tanto definirlo como obtenerlo, pasándole como parámetro el nombre del dato.

window.alert($("#fruta").data("fruta"));

El ejemplo de arriba haría un alert mostrándonos el valor. Fíjate que cuando le paso el nombre del atributo lo hago quitándole el prefijo data-. Y hay otra peculiaridad: si el nombre tiene varios guiones entonces estos desaparecen y escribimos el atributo siguiendo la convención camelCase. Un ejemplo:

<div id='fruta' data-fruta-oferta='pera'></div>
<script type="javascript">
window.alert($("#fruta").data("frutaOferta"));
</script>

En próximas entradas veremos cómo escribir los atributos y cómo acceder a ellos desde Javascript sin usar jQuery.

Tratando los objetos jQuery como arrays.

Cuando con jQuery ejecutamos un selector sobre un elemento del DOM el resultado es un objeto de jQuery. Sin embargo, la librería hace que podamos trabajar con estos elementos como si de un array se tratara, dado que define índices y una longitud.

//recogemos en una variable todos
//los elementos de la clase link
var elementos = $(".link");

// ahora podemos recorrer la colección
for(var i=0;i<elementos.length;i++){
    console.log(elementos[i]);
}

La propiedad length nos permite de esta forma saber si la colección contiene algún elemento. Si es 0 está vacío, y si es mayor el resultado es la cantidad de elementos que contiene.

if(elementos.length){
    //si hay elementos hace lo pongamos aquí
}

Si bien jQuery nos da la función $.each() para recorrer una colección de elementos, hacerlo de esta forma con un for o un while es mucho más rápido.

Conocer el «peso» de tu página con jQuery

Vamos con una corta entrada rápida sobre jQuery ¿quieres saber cuántos elementos DOM hay en tu página? Con una simple línea con jQuery podemos mandar la cuenta a la consola del navegador, tal que así:

console.log( $('*').length );

Conocer el número de elementos puede ser útil si estás buscando la causa de una ralentización en la carga de una página.

Cambiar el src de una imagen con javascript o jQuery

Vamos con una entrada rápida de Javascript ¿Cómo cambio el src de una imagen de forma dinámica? No es lo más recomendable para una web por temas de posicionamiento, pero puede ser una solución útil para una aplicación web de uso interno.

Vamos a suponer que tenemos una imagen llamada image1.jpg y que al clickar en un elemento esta cambia por otra que se llama image2.jpg:

<img src="image1.jpg" id="img1" alt="primeraImagen" />

<script>
//así con JS normal
//accediendo directamente a src
function cambiarImagenJS(){
  document.getElementById("img1").src="image2.jpg";
}

//así con jQuery
//haciendo uso de la función attr()
function cambiarImagenjQ(){
  $("#img1").attr("src","image2.jpg");
}
</script>

La idea sería vincular la función a un evento (un click, el cambio de estado de un checkbox o radio, llenar un campo de texto…) y cambiar el valor. En el ejemplo damos por fijo el id del elemento, en la práctica seguramente sería mejor pasárselo a la función. En ese caso ya miráis que se adapta mejor a vuestras necesidades.

Hack: tipografía open source para escribir código.

Leía esta mañana en Genbeta sobre esta tipografía y no pude resistirme a comentarla por aquí: Hack, una tipografía pensada para desarrolladores.

Hack regular type

¿Por qué está pensada para desarrolladores? Pues porque esta familia de tipografías, con cuatro variantes (normal, cursiva, negrita y cursiva-negrita), ha sido creada poniendo el foco en su diseño para pantalla y no para impresión, con un contraste, altura y anchura pensados para una lectura cómoda y con detalles como rellenar los ceros con un óvalo para diferenciarlos con facilidad de la letra o.

En este enlace puedes ver cómo pinta la fuente y compararla con muchas otras. La licencia es Open Source y muy flexible, por lo que podrías modificarla, redistribuirla y usarla con fines comerciales.

La puedes descargar desde este enlace a Github. Su instalación tanto en Ubuntu como en Windows no podría ser más simple: basta con descargar el zip, extraer el fichero .ttf, abrirlo y pulsar el botón de instalar.

Detectar intrusos en tu wifi desde Android o iOS

En el pasado vimos cómo detectar intrusos en tu wifi con Windows (ya hace años de eso) y desde Ubuntu. Pero ¿y si eres un usuario que tiene sólo tablet y móvil? ¿puedes saber si te están vampirizando la wifi? Puedes. Existen varias apps para ello, pero creo que la más sencilla es Fing, que además en su versión más básica es gratis.

Fing es una aplicación que te permite escanear la red a la que estás conectado, y por suerte existen versiones para varios sistemas operativos. De hecho puedes usar también Fing desde un portátil o sobremesa ya que también tiene versiones para Linux, Windows y MacOSX.

Centrándonos en la versión móvil, no puede ser más sencilla de usar: la puedes descargar desde aquí y, una vez instalada, basta ejecutar la aplicación para ver qué equipos hay conectados a la red. Los móviles tendrán un icono distintivo, al igual que el router o punto de acceso al que esté conectado el teléfono. Una vez veas la lista puedes calcular si ves algo raro, si hay algún equipo que no debiera estar conectado. En caso de que haya un invitado indeseado la mejor opción es que cambies la contraseña de la wifi.

Fing captura

Pulsando encima de cada dispositivo conectado podrás tener varias opciones: una es ver la MAC del dispositivo, por si quieres añadir a tu router una regla de filtrado por MAC para impedir que ese equipo se conecte (aunque la MAC puede cambiarse, así que no es un método infalible para evitar conexiones indeseadas). Otra es la de etiquetar a ese dispositivo con un nombre a tu elección (por ejemplo «ordenador del salón«) para facilitar su identificación cuando ejecutes el app. También puedes realizar un escaneado de puertos o lanzar un ping. Si decides hacerte una cuenta puedes disponer de notificaciones cuando alguien se conecte y más opciones.

Como ves es una solución fácil para tener controlado quién accede a tu wifi. Por cierto, que los creadores de Fing están trabajando en Fingbox, un dispositivo de hardware que facilitaría la expulsión de intrusos de tu red.